Collectors.averagingInt

Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作。

Collectors.averagingInt() 方法和 Collectors.averagingDouble() 一样,不同的是它把流中的所有元素看成是 int类型,并返回一个浮点类型的平均值

然而:最不同的是–> 方法体中执行次数不同,做了优化

@Test
public void AveragingIntExample() {
    List<Double> list = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);
    Double result = list.stream().map(s -> {
        System.out.println("map-> " + s);
        return s;
    }).collect(Collectors.averagingInt(d -> {
                System.out.println(d + "-->" + (int) (d * 2));
                return (int) (d * 2);
            })
    );
    System.out.println("结果: "+result);
}

执行结果

map-> 1.1
1.1-->2
map-> 2.2
2.2-->4
map-> 3.3
3.3-->6
map-> 4.4
4.4-->8    #??? 这里为什么是 8? 4.4*2 = 8.8? 转化为Int之后变为8
map-> 5.5
5.5-->11
结果: 6.2

收货: Double值强转Int后,会丢失小数点后的值,不信你可以试一试

System.out.println((int) (9.9)); //值为9
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐