偶数的平均值给出了错误的值

Cso*_*agy 4 java lambda java-stream

我正在努力接近理解溪流,因此我正在做一些基本的练习.在这一个中,我想计算奇数的平均值.我写这个算法是为了这样做,但是它给出了不正确的结果(8.0).我试图调试它,但我找不到它实际上做了什么.

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");
}
Run Code Online (Sandbox Code Playgroud)

我的代码现在在做什么?我应该如何解决它做它应该做的事情?

khe*_*ood 11

(i -> i % 2 == 1)
Run Code Online (Sandbox Code Playgroud)

这仅适用于正奇数,因为在Java中,%如果第一个操作数为负,则运算符返回负数(或零).

如果你只想保留偶数,它应该是:

(i -> i % 2 == 0)
Run Code Online (Sandbox Code Playgroud)

如果要保留所有奇数(正数和负数),可以使用:

(i -> i % 2 != 0)
Run Code Online (Sandbox Code Playgroud)