Kotlinreduce 方法是用来对你代码中的一组集合应用一个还原函数。
减速器函数是一个对集合中的每个元素执行自定义操作的函数,目的是返回一个值。
然后,由reducer函数返回的值会累积起来,直到从reduce 方法返回一个单一的最终值。
学习理论上的还原器有点混乱,所以让我们看一个还原器的实际操作的例子。
Int 想象一下,你有一个List 的值,你想对列表中的所有值进行求和。
你可以使用reduce 方法,如下所示:
val numbers = listOf(1, 2, 3, 4)
val aSum = numbers.reduce { accumulator, currentEl ->
println("accumulator: $accumulator")
println("currentEl: $currentEl")
accumulator + currentEl
}
println(aSum) // 10
上面的reduce 方法中的println 语句的输出看起来如下:
accumulator: 1
currentEl: 2
accumulator: 3
currentEl: 3
accumulator: 6
currentEl: 4
正如你所看到的,reduce 方法在它被调用的元素集合上进行迭代,并将你的集合的值传递给reducer函数,也就是上面大括号内的全部代码{} 。
大括号是Kotlin的lambda函数表达式。它只是一种更简短的方式,将一个没有名字的函数传递给reduce 方法。
下面是一个没有lambda函数表达式的上述代码的等价物:
val aSum = numbers.reduce(fun(accumulator: Int, currentEl: Int): Int {
println("accumulator: $accumulator")
println("currentEl: $currentEl")
return accumulator + currentEl
})
如上图所示,lambda函数表达式比普通的匿名函数更短、更简明。
对于reducer函数的第一次迭代,你列表中的第一个索引值将被传递为accumulator ,第二个索引值被传递为currentEl (或当前元素)
然后,你可以自由地对这些值进行操作,只要你返回一个单一的值,该值将被传递为下一次迭代的accumulator 值。
Kotlin的reduce 方法适用于所有类型的集合,所以你可以根据需要在Int,String,Char, 或Boolean 列表上使用它:
val letters = listOf("ab", "cd")
val combinedLetters = letters.reduce { accumulator, currentEl ->
accumulator + currentEl
}
println(combinedLetters) // abcd
现在你已经知道了reduce 方法在Kotlin中是如何工作的。干得好!👍