我对这两个函数都很困惑,fold()在reduce()Kotlin 中,谁能给我一个区分它们的具体例子?
fold()
reduce()
fold接受一个初始值,传递给它的 lambda 的第一次调用将接收该初始值和集合的第一个元素作为参数。
fold
例如,采用以下代码计算整数列表的总和:
listOf(1, 2, 3).fold(0) { sum, element -> sum + element }
对 lambda 的第一次调用将使用参数0和1。
0
1
如果您必须为您的操作提供某种默认值或参数,那么能够传入初始值会很有用。例如,如果您正在查找列表中的最大值,但由于某种原因希望返回至少 10,您可以执行以下操作:
listOf(1, 6, 4).fold(10) { max, element -> if (element > max) element else max }
reduce不采用初始值,而是从集合的第一个元素作为累加器开始(sum在以下示例中调用)。
reduce
sum
例如,让我们再次对整数求和:
listOf(1, 2, 3).reduce { sum, element -> sum + element }
此处对 lambda 的第一次调用将使用参数1和2。
2
reduce当您的操作不依赖于您应用它的集合中的值以外的任何值时,您可以使用。