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