Kotlin折叠和缩小的基本区别是什么? 什么时候用哪个?
我正在经历Kotlin的基础知识,我对Kotlin的这两个函数fold()和reduce()都很困惑,任何人都可以给我一个具体的例子来区分两者吗?
fold
取初始值,并且传递给它的lambda的第一个调用将接收该初始值,并将集合的第一个元素作为参数。
例如,采用下面的代码来计算整数列表的总和:
listOf(1, 2, 3).fold(0) { sum, element -> sum + element }
第一次调用lambda将使用参数0
和1
。
如果您必须为您的操作提供某种类型的默认值或参数,则具有传递初始值的功能非常有用。 例如,如果您正在查找列表中的最大值,但由于某种原因想返回至少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将使用参数1
和2
。
当您的操作不依赖于您要应用的集合以外的任何值时,可以使用reduce
。