大数据系列修炼-Scala课程35
核心内容:
1、scala中List的map、flatMap、foreach、filter操作代码实战
1、Scala中List的map、flatMap、foreach、filter操作代码实战 |
1>map就是对集合中的所有元素履行1个具体的函数,将函数作用在数值上,并返回1个新的集合结果
2>flatMap:首先对List内部的每一个成员进行map操作,map产生的结果会是1个List(List(char)),然后在产生结果的基础上
进行flat–将map操作后的结果进行合并,产生合并以后的集合(List[char])。
简单来讲:flatMap首先履行map操作,然后对产生集合的结果进行合并,合并出1个新的集合结果
toList作用在具体的字符串上面:将字符串的list集合变成字符的list集合:List[List[Char]]
3>foreach:就是对集合中的每个元素履行1个具体的函数,将函数作用在数值上,与map不同的是,foreach不产生具体的
结果,结果是Unit类型的。
4>filter:过滤出列表中符合条件的元素,filter结构中传进来的参数是1个结构为布尔类型的函数。
实例程序1:
//map函数:就是对集合中的所有元素履行1个具体的函数,将函数作用在数值上,并产生1个新的集合结果
val arr = Array(10,20,30) //> arr : Array[Int] = Array(10, 20, 30)
val arr2 = arr.map((x:Int)=>x+100) //> arr2 : Array[Int] = Array(110, 120, 130)
//将List集合中的每个元素加10,并返回1个新的集合结果
val list1 = List(10,20,30,40) //> list1 : List[Int] = List(10, 20, 30, 40)
list1.map((x:Int)=>x+10) //> res0: List[Int] = List(20, 30, 40, 50)
list1.map((x)=>x+10) //> res1: List[Int] = List(20, 30, 40, 50)
list1.map(_+10) //> res2: List[Int] = List(20, 30, 40, 50)
val data = List("Scala","Hadoop","Spark") //> data : List[String] = List(Scala, Hadoop, Spark)
data.toList //> res3: List[String] = List(Scala, Hadoop, Spark)
data.toList.reverse //> res4: List[String] = List(Spark, Hadoop, Scala)
//toList作用在具体的字符串上面:将字符串的list集合变成字符的list集合:List[List[Char]]
data.map(_.toList) //> res5: List[List[Char]] = List(List(S, c, a, l, a), List(H, a, d, o, o, p), L
//| ist(S, p, a, r, k))
data.flatMap(_.toList) //> res6: List[Char] = List(S, c, a, l, a, H, a, d, o, o, p, S, p, a, r, k)
data.map(_.toList.reverse.mkString("\t")) //> res7: List[String] = List(a l a c S, p o o
//| d a H, k r a p S)
//将List集合变成1个字符串
data.toList.reverse.mkString("---") //> res8: String = Spark---Hadoop---Scala
data.map((str:String)=>str.length) //> res9: List[Int] = List(5, 6, 5)
data.map(_.length) //> res10: List[Int] = List(5, 6, 5)
data.map(_.toList.reverse.mkString) //> res11: List[String] = List(alacS, poodaH, krapS)
实例程序2:
object App
{
def main(args:Array[String]):Unit=
{
val list = List(10,20,30,40)
val list2 = list.foreach((x:Int)=>x+10)
val list3 = list.map((x:Int)=>x+10)
println(list2)
println(list3)
var sum = 0
list.foreach(sum+=_)
println(sum)
val list4 = List.range(1, 11).filter(_%2==0)
println(list4)
val list5 = List("spark","hadoop","hbase").filter(_.length==5)
println(list5)
}
}
运行结果:
()
List(20, 30, 40, 50)
100
List(2, 4, 6, 8, 10)
List(spark, hbase)