Promedio de los números pares da valor erróneo de vuelta

-Alta de sonar:

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?

Kelv ॊ d:
(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)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=182625&siteId=1
Recomendado
Clasificación