降低

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 函式只能返回列表的型別或超型別。