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正常工作。但这并不是