如何在Java流中取平均值?

Mas*_*oe2 1 java lambda java-stream

我想计算整数列表的平均值,然后将结果四舍五入(即> = .5向上舍入为最接近的整数,而<.5向下舍入为最接近的整数)。如何使用Java流执行此操作?

public static void main(String [] args){
    List<Integer> values = new ArrayList<>();
    values.add(60);
    values.add(30);
    values.add(20);

    double avg = values.stream().mapToInt(a -> a).average().getAsDouble();

    System.out.println(avg);
}
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西

...average().round(RoundingMode.HALF_UP).getAsInt();
Run Code Online (Sandbox Code Playgroud)

kaa*_*aan 5

您的目的是舍入结果,而不是流本身中的值。因此,只需等到获得双精度值,然后Math.round()通过替换此值将其取整:

System.out.println(avg);
// output: 36.666666666666664
Run Code Online (Sandbox Code Playgroud)

有了这个:

System.out.println(Math.round(avg));
// output: 37
Run Code Online (Sandbox Code Playgroud)