第35講:List的map、flatMap、foreach、filter操作代碼實戰

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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章