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)