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)