标签:list 高阶函数
List的Map函数的作用:
map的参数是一个函数,List中的每个元素都应用于这个函数,并且返回一个新的集合。
例如我们有一个List(1,2,3,4) ,我们需要构建List(2,4,6,8)
那么我们就可以使用Map函数,传入一个*2的函数
如下:
scala> val list = List(1,2,3,4) list: List[Int] = List(1, 2, 3, 4) scala> list.map(x => x*2) res0: List[Int] = List(2, 4, 6, 8)
x => x*2 是一个匿名函数。 List中的每个元素都应用于这个函数。
这种只有一个参数的匿名函数、可以使用_占位符简化写法。
scala> list.map(_*2) res1: List[Int] = List(2, 4, 6, 8)
scala> val bigData =List("spark","hadoop","hbase") bigData: List[String] = List(spark, hadoop, hbase) scala> bigData.map(_.length) res2: List[Int] = List(5, 6, 5)
scala> bigData.map(_.toList) res3: List[List[Char]] = List(List(s, p, a, r, k), List(h, a, d, o, o, p), List(h, b, a, s, e))
我们把bigData中的每个单词都倒叙打印
scala> bigData.map(_.toList.reverse.mkString) res6: List[String] = List(kraps, poodah, esabh)
flatMap函数:
“flatMap “函数的一半功能和map函数一样,不过有个要求,传入的函数在处理完后返回值必须是List(应该是Seq),如果结果不是List(Seq),那么将出错。也就是说,传入的函数是有要求的——返回值是Seq才行。这样,每个元素处理后返回一个List,我们得到一个包含List元素的List,flatMap自动将所有的内部list的元素取出来构成一个List返回。
scala> list.flatMap(_*2) <console>:12: error: type mismatch; found : Int required: scala.collection.GenTraversableOnce[?] list.flatMap(_*2)
因为_*2 返回的不是seq,所以报错。
scala> list.flatMap(_ match { case x => List(x*2)}) res5: List[Int] = List(2, 4, 6, 8)
foreach函数:
其参数也是一个函数,对List中的每个元素应用这个参数函数
scala> var sum =0 sum: Int = 0 scala> list.foreach(sum +=_) scala> println(sum) 10
filter函数:
返回一个List,其参数是一个返回Boolean类型的函数,如果返回值为true,则该元素返回。
如果我们想保留list中的偶数,可以使用如下方法:
scala> list.filter { x => x %2 == 0 } res9: List[Int] = List(2, 4)
本文出自 “叮咚” 博客,请务必保留此出处http://lqding.blog.51cto.com/9123978/1742034
第35讲:List的map、flatMap、foreach、filter操作代码实战
标签:list 高阶函数
原文地址:http://lqding.blog.51cto.com/9123978/1742034