降低

reduce()reduceLeft()reduceRight 方法类似于折叠。传递给 reduce 的函数接受两个值并产生第三个值。在列表上操作时,前两个值是列表中的前两个值。然后将函数的结果和列表中的下一个值重新应用于函数,从而产生新的结果。这个新结果将应用列表的下一个值,依此类推,直到没有更多元素为止。返回最终结果。

val nums = List(1,2,3,4,5)
sum = nums.reduce({ (a, b) => a + b })
println(sum) //prints 15

val names = List("John","Koby", "Josh", "Matilda", "Zac", "Mary Poppins")

def findLongest(nameA:String, nameB:String):String = {
  if (nameA.length > nameB.length) nameA else nameB
}

def findLastAlphabetically(nameA:String, nameB:String):String = {
  if (nameA > nameB) nameA else nameB
}

val longestName:String = names.reduce(findLongest(_,_))
println(longestName) //prints Mary Poppins

//You can also omit the arguments if you want
val lastAlphabetically:String = names.reduce(findLastAlphabetically)
println(lastAlphabetically) //prints Zac

与折叠函数相比,reduce 函数的工作方式存在一些差异。他们是:

  1. reduce 函数没有初始累加器值。
  2. 无法在空列表上调用 Reduce 函数。
  3. Reduce 函数只能返回列表的类型或超类型。