scala函数组合器

1、map

在列表中的每个元素上计算一个函数,并且返回一个包含相同数目元素的列表。

scala> numbers.map(_ * 2)
res3: Array[Int] = Array(2, 4, 6, 8)

2、foreach

和map一样对序列中的每个元素操作,不同的是无返回值

scala> numbers.foreach(println(_))
1
2
3
4

3、filter

移除任何使得传入的函数返回false的元素。返回Boolean类型的函数一般都称为断言函数。

scala> numbers.filter(_ % 2 == 0)
res5: Array[Int] = Array(2, 4)

4、zip

把两个列表的元素合成一个由元素对组成的列表里。

scala> Array(1, 2, 3).zip(Array("one", "two", "three"))
res6: Array[(Int, java.lang.String)] = Array((1,one), (2,two), (3,three))

5、partition

根据断言函数的返回值对列表进行拆分。

scala> val numbers = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
numbers: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> numbers.partition(_ % 2 == 0)
res7: (Array[Int], Array[Int]) = (Array(2, 4, 6, 8, 10),Array(1, 3, 5, 7, 9))

6、find

返回集合里第一个匹配断言函数的元素

scala> numbers.find(_ > 5)
res8: Option[Int] = Some(6)

7、drop&dropWhile

drop丢弃前i个元素

scala> numbers.drop(3)
res9: Array[Int] = Array(4, 5, 6, 7, 8, 9, 10)

dropWhile移除前几个匹配断言函数的元素

scala> numbers.dropWhile(_ % 2 != 0)
res11: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10)

8、foldLeft

scala> numbers.foldLeft(0)((a, b) => a + b)
res12: Int = 55

0是起始值

scala> numbers.foldLeft(0){(a, b) => println("a: " + a + " b: " + b); a + b}
a: 0 b: 1
a: 1 b: 2
a: 3 b: 3
a: 6 b: 4
a: 10 b: 5
a: 15 b: 6
a: 21 b: 7
a: 28 b: 8
a: 36 b: 9
a: 45 b: 10
res16: Int = 55

9、foldRight

迭代方向与前者相反

10、flatten

flatten可以把嵌套的结构展开

scala> Array(Array(1, 2), Array(3, 4))
res17: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> Array(Array(1, 2), Array(3, 4)).flatten
res18: Array[Int] = Array(1, 2, 3, 4)

11、flatMap

它结合了map和flatten的功能。flatMap接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。

scala> val test = Array(Array(1, 2), Array(3, 4))
test: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> test.flatMap(x => x.map(_ * 2))

res20: Array[Int] = Array(2, 4, 6, 8)

posted @ 2013-09-02 19:59  vincent_hv  阅读(893)  评论(0编辑  收藏  举报