小编典典

Kotlin中折叠和减少之间的区别,何时使用?

all

我对这两个函数都很困惑,fold()reduce()Kotlin 中,谁能给我一个区分它们的具体例子?


阅读 57

收藏
2022-08-17

共1个答案

小编典典

fold接受一个初始值,传递给它的
lambda 的第一次调用将接收该初始值和集合的第一个元素作为参数。

例如,采用以下代码计算整数列表的总和:

listOf(1, 2, 3).fold(0) { sum, element -> sum + element }

对 lambda 的第一次调用将使用参数01

如果您必须为您的操作提供某种默认值或参数,那么能够传入初始值会很有用。例如,如果您正在查找列表中的最大值,但由于某种原因希望返回至少
10,您可以执行以下操作:

listOf(1, 6, 4).fold(10) { max, element ->
    if (element > max) element else max
}

reduce不采用初始值,而是从集合的第一个元素作为累加器开始(sum在以下示例中调用)。

例如,让我们再次对整数求和:

listOf(1, 2, 3).reduce { sum, element -> sum + element }

此处对 lambda 的第一次调用将使用参数12

reduce当您的操作不依赖于您应用它的集合中的值以外的任何值时,您可以使用。

2022-08-17