Collectors.summingDouble()
Java 8
流的新类java.util.stream.Collectors
实现了java.util.stream.Collector
接口,同时又提供了大量的方法对流 (stream
) 的元素执行map
and
reduce
操作,或者统计操作。
Collectors.summingDouble()
方法将流中的所有元素视为 Double
类型,并计算所有元素的总和 ( sum )
summingDoubleExample代码
@Test
public void summingDoubleExample() {
List<Double> list = Arrays.asList(1.1, 2.2, 3.3, 4.4);
Double sum = list.stream().collect(Collectors.summingDouble(i -> {
System.out.println("i -> " + i);
return i;
}));
System.out.println(sum);
}
summingLongExample结果
i -> 1.1
i -> 1.1
i -> 2.2
i -> 2.2
i -> 3.3
i -> 3.3
i -> 4.4
i -> 4.4
11.0
运行结果: 结果显示计算平均值时为什么会打印两遍其中的值?
- 如果在方法体中操作全局变量岂不是操作两遍?? 这不是坑么
- 如果在方法体中做复杂操作,岂不是两倍??? 巨坑阿
- 如果在方法体中做判断,判断后改动状态值,改两遍!!
- ……
- 用我智慧的大脑一想……没得玩了
注意:
-
定义
List
中,也就是生成stream
流中的参数要进行类型声明,如果不明确类型,里面还要进行强制转换 -
由于是
Double
,值的上限是很**不**明显的,如果想要溢出是很难的,除非有超级大的计算量-
@Test public void summingDoubleExample() { System.out.println(Double.MAX_VALUE); } //结果为:1.7976931348623157E308 何其之大
-
-
这就使
Double
的优势很明显了,其与summingLong
|summingInt
明显不同 -
劣势还是很明显的,函数体中计算两次,容易导致其他错误。