32.scala编程思想笔记——map和reduce
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50445777
源码下载连接请见第一篇笔记。
Map接受参数,一个接受单个参数并产生返回值的函数,并将其应用于序列中的每个元素。
与foreach 相似,但是map可以捕获每次调用时的返回值,并将其存储到一个以map作为返回值而产生的新序列中。
例如,对Vector中每个元素都加1的例子:
import com.atomicscala.AtomicTest._
val v = Vector(1, 2, 3, 4)
v.map(n => n + 1) is Vector(2, 3, 4, 5)
输出如下:
Vector(2, 3, 4, 5)
如果需要将序列中所有值加起来的方式:
例如:
import com.atomicscala.AtomicTest._
val v = Vector(1, 10 , 100, 1000)
var sum = 0
v.foreach(x => sum += x)
sum is 1111
输出如下:
1111
实现来起来虽然也不错,但是用reduce更好。
Reduce使用参数,来组合序列中所有元素,产生更加整洁的序列求和方式:
import com.atomicscala.AtomicTest._
val v = Vector(1, 10, 100, 1000)
v.reduce((sum, n) => sum + n) is 1111
输出如下:
1111
Reduce可以再序列上执行所有种类的操作。并未限制其只能作用于Int或者只能做加法。
例如:
import com.atomicscala.AtomicTest._
(1 to 100).reduce((sum, n) => sum + n) is
5050
val v2 = Vector("D", "u","c", "k")
v2.reduce((sum, n) => sum + n) is "Duck"
注意:map和reduce的作用相当于正常情况下手写的迭代代码。
函数式编程的重要标志之一就是map,reduce,foreach。
当然可以自己编写这样的代码,但是直接使用这些代码可以创建更健壮的代码。