一、对List的map、flatMap实战
map:对List所有元素执行一个具体的函数
flatMap:对List内部的成员进行map,结果为List,再对这个结果flat合并,产生合并后的集合
println(List(1,2,3,4,5) map(_ + 1)) //相当于map(item => item + 1)
val data = List("scala", "hadoop", "spark")
println(data map(_.length)) //对data中每一个元素计算长度
println(data map(_.toList.reverse.mkString)) //把data中每一个元素由字符串转换成List,再反转,再转换成字符串
println
println(data map(_.toList))
println(data flatMap(_.toList))
//混合使用flatMap和map
println(List.range(1,10) flatMap(i => List.range(1,i) map (j => (i,j))))
输出: List(2, 3, 4, 5, 6)
List(5, 6, 5)
List(alacs, poodah, kraps)
List(List(s, c, a, l, a), List(h, a, d, o, o, p), List(s, p, a, r, k))
List(s, c, a, l, a, h, a, d, o, o, p, s, p, a, r, k)
List((2,1), (3,1), (3,2), (4,1), (4,2), (4,3), (5,1), (5,2), (5,3), (5,4), (6,1), (6,2), (6,3), (6,4), (6,5), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (9,8))
二、对List的foreach、filter实战
foreach:对所有元素应用一个具体的函数。与map的区别:不产生结果,类型为Unit
filter:过滤出列表中符合条件的元素,filter参数为结果为Boolean的函数
var sum = 0
List(1,2,3,4,5) foreach(sum += _) //把List的每一个元素都加起来
println(sum)
println(List(1,2,3,4,5,6,7,8,9,10) filter(_ % 2 == 0)) //过滤出所有的偶数
println(data filter(_.length == 5)) //过滤出长度为5的元素
输出:
15
List(2, 4, 6, 8, 10)
List(scala, spark)
参考资料来源于大数据梦工厂 深入浅出scala 第35讲 由王家林老师讲解