Kotlin折叠和缩小的基本区别是什么? 什么时候用哪个?

我正在经历Kotlin的基础知识,我对Kotlin的这两个函数fold()和reduce()都很困惑,任何人都可以给我一个具体的例子来区分两者吗?

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