Avatar ·

Kotlin中fold和reduce的区别及何时使用

你好!我最近开始学习Kotlin,在处理集合时遇到了fold和reduce函数。我知道它们都用于聚合元素,但无法理解区别。 下面是一个让我困惑的例子。假设我有一个数字列表: ```kotlin val numbers = listOf(1, 2, 3, 4, 5) ``` 我可以通过reduce计算总和: ```kotlin val sumReduce = numbers.reduce { acc, i -> acc + i } println(sumReduce) // 15 ``` 以及通过fold: ```kotlin val sumFold = numbers.fold(0) { acc, i -> acc + i } println(sumFold) // 15 ``` 结果相同。但我注意到在fold中我传递了初始值(0),而在reduce中没有。如果列表为空会怎样?我尝试了: ```kotlin val emptyList = listOf() // val result = emptyList.reduce { acc, i -> acc + i } // 错误! val result2 = emptyList.fold(0) { acc, i -> acc + i } println(result2) // 0 ``` 结果reduce在空列表上抛出错误,而fold正常工作。但这并不是