如何在空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" 
Interesting Posts