Estoy tratando de acercarse a la comprensión de los flujos tanto que estoy haciendo algunos ejercicios básicos. En éste, me gustaría para calcular el promedio de los números impares. Escribí este algoritmo para hacerlo, pero devuelve un resultado incorrecto (8,0). He tratado de depurar, pero no pude encontrar lo que realmente hace.
List<Integer> numbers = Arrays.asList(1, 3, -2, -4, -7, -3, -8, 12, 19, 6, 9, 10, 14);
OptionalDouble result = numbers.stream()
.filter(i -> i % 2 == 1)
.mapToDouble(i -> i).average();
if (result.isPresent()) {
System.out.println(result);
} else {
System.out.println("Error");
}
¿Cuál es mi código haciendo ahora? ¿Cómo debería fijarlo a hacer lo que se supone que debe hacer?
(i -> i % 2 == 1)
Esto sólo es cierto para los números impares positivos, porque en Java el %
operador devuelve un número negativo (o cero) si el primer operando es negativo.
Si desea conservar solamente incluso números, que debe ser:
(i -> i % 2 == 0)
Si desea conservar todos los números impares (positivos y negativos), se puede utilizar:
(i -> i % 2 != 0)