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