如何在空Kotlin数组上调用reduce?
简单的减少一个空数组将抛出:
线程“main”中的异常java.lang.UnsupportedOperationException:空的迭代不能被减少。
链接时出现同样的异常:
val a = intArrayOf() val b = a.reduce({ memo, next -> memo + next }) // -> throws an exception val a1 = intArrayOf(1, 2, 3) val b1 = a.filter({ a -> a < 0 }).reduce({ a, b -> a + b }) // -> throws an exception
这是减少预期的操作还是一个错误?
有没有解决办法?
异常是正确的, reduce
不能在一个空的迭代或数组。 你可能正在寻找的是fold
,它取得了一个初始值和一个操作,这个操作被连续地应用于每个迭代元素。 reduce
将第一个元素作为起始值,所以它不需要额外的值作为参数传递,但是要求集合不是空的。
fold
使用示例:
println(intArrayOf().fold(0) { a, b -> a + b }) // prints "0"