Collectors.summingInt()
Java 8
流的新类java.util.stream.Collectors
实现了java.util.stream.Collector
接口,同时又提供了大量的方法对流 (stream
) 的元素执行map
and
reduce
操作,或者统计操作。
Collectors.summingInt()
方法将流中的所有元素视为 int
类型,并计算所有元素的总和 ( sum )
summingIntExample代码
@Test
public void summingIntExample() {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
Integer max = list.stream().collect(Collectors.summingInt(i -> i));
System.out.println(max);
}
summingIntExample结果
10
注意:
-
定义
List
中,也就是生成stream
流中的参数要进行类型声明,如果不明确类型,里面还要进行强制转换 -
由于是
Integer
,值的上限是很明显的,如果不控制Sum
和的大小,很容易出现值的溢出而导致负数,计算不正确-
@Test public void summingIntExample() { List<Integer> list = Arrays.asList(1999999999, 1999999999, 1999999999, 1999999999); Integer max = list.stream().collect(Collectors.summingInt(i -> i)); System.out.println(max); } //结果为:-589934596
-
一点唠叨:
- 相对于
Collectors.averagingDouble()
来说,方法体只执行一次。 - 相对于
Collectors.averagingDouble()
来说,方法体做出了优化 - 相对于
Collectors.averagingDouble()
来说,这个没有坑 - ……
- 为什么这么提
Collectors.averagingDouble()
,最好看一下—> averagingDouble - 因为
Collectors.averagingDouble()
有坑,有坑,有坑