reduce - ¿Cómo llamar a reducir en una matriz Kotlin vacía?
(1)
Simplemente reducir en una matriz vacía lanzará:
Excepción en el hilo "main" java.lang.UnsupportedOperationException: El iterable vacío no se puede reducir.
La misma excepción al encadenar:
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
¿Es la operación esperada de la reducción o es un error?
¿Hay alguna solución?
La excepción es correcta, reduce
no funciona en una iterable o matriz vacía. Lo que probablemente está buscando es fold
, que toma un valor de inicio y una operación que se aplica sucesivamente para cada elemento de lo iterable. reduce
toma el primer elemento como valor de inicio, por lo que no necesita que se pase un valor adicional como argumento, pero requiere que la colección no esté vacía.
Ejemplo de uso del fold
:
println(intArrayOf().fold(0) { a, b -> a + b }) // prints "0"