scala中函式組合器的用法(map,filter,zip,foreach,groupBy,flatten,drop等)
阿新 • • 發佈:2018-12-25
本文主要記錄了scala學習中的常用函式組合器,包括map,filter,zip,foreach,groupBy,flatten,drop等。
map
map方法可以將某個函式應用到集合中的每個元素併產出其結果的集合。舉例:
val names = List("a","b","c")
names.map(_.toUpperCase)
得到結果
List("A","B","C")
foreach
foreach和map類似,只不過它沒有返回值,foreach只要是為了對引數進行作用。比如:
List(1,2,3,4,5).foreach{x=>
println(x)
}
輸出:
1
2
3
4
5
flatten
flatten的作用是可以把巢狀的結構展開,例如
scala> List(List(1,2),List(3,4)).flatten
res0: List[Int] = List(1, 2, 3, 4)
flatmap
flatMap結合了map和flatten的功能。接收一個可以處理巢狀列表的函式,然後把返回結果連線起來。
scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))
res5: List[Int] = List(2, 4, 6, 8)
filter
濾除掉使函式返回false的元素
scala> def isEven(i: Int): Boolean = i % 2 == 0
isEven: (i: Int)Boolean
scala> List(1,2,3,4).filter(isEven _)
res6: List[Int] = List(2, 4)
zip
zip方法將兩個集合結合在一起,例如:
scala> List('a,'b,'c).zip(List(1,2,3))
res32: List[(Symbol, Int)] = List(('a,1), ('b,2), ('c,3))
zipWithIndex
將集合中的元素和對應的下標結合再一起,下標從0開始
scala> List(2,3,4,5).zipWithIndex
res33: List[(Int, Int)] = List((2,0), (3,1), (4,2), (5,3))
groupBy
對集合中的元素進行分組操作,結果是得到一個Map,舉例
scala> List((1,2),(1,3),(2,3),(3,3),(3,4)).groupBy(_._1)
res1: scala.collection.immutable.Map[Int,List[(Int, Int)]] = Map(2 -> List((2,3)), 1 -> List((1,2), (1,3)),
3 -> List((3,3), (3,4)))
drop
去掉集合前面的n個元素
scala> List(1,2,3,4,5,6,7).drop(3)
res2: List[Int] = List(4, 5, 6, 7)
dropRight(n) 是去掉後面的n個元素
scala> List(1,2,3,4,5,6,7).dropRight(3)
res3: List[Int] = List(1, 2, 3, 4)
patch
對於可變的資料結構進行批量替換,返回新的copy,原資料不變
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> val b = List(4,5)
b: List[Int] = List(4, 5)
scala> a patch(0,b,2)
res1: List[Int] = List(4, 5, 3)
scala> a patch(1,b,2)
res2: List[Int] = List(1, 4, 5)