规约操作是对容器的元素进行两两运算,将其“规约”为一个值。
常用的规约方法有reduce和fold,两个方法唯一的差别是, reduce是从容器的两个元素开始规约,而fold则是从提供的初始值开始规约。
同样地,对于无序容器而言, fold方法不保证规约时的遍历顺序,如要保证顺序,请使用foldLeft和foldRight,其中,关于匿名函数参数的定义,与reduceLeft和reduceRight完全一样。
reduce
最常见的规约方法是 reduce方法,它接受一个二元函数f作为参数,首先将f作用在某两个元素上并返回一个值,然后再将f作用在上一个返回值和容器的下一个元素上,再返回一个值,依此类推,最后容器中的所有值会被规约为一个值。
@Test
def testReduce(): Unit ={
/**
* 测试reduce与fold
*/
val list=1 to 10
val newList=list.reduce(_+_)
println(newList)
}
输出结果
55
fold
与reduce方法非常类似的一个方法是fold方法。fold方法是一个双参数列表的函数,第一个参数列表接受一个规约的初始值,第二个参数列表接受与reduce中一样的二元函数参数。
@Test
def testFold(): Unit ={
/**
* 测试reduce与fold
*/
val list=1 to 10
val newList=list.fold(100)(_+_)
println(newList)
}
输出结果
155