Collectors.summingDouble()
Java 8流的新类java.util.stream.Collectors实现了java.util.stream.Collector接口,同时又提供了大量的方法对流 (stream) 的元素执行mapandreduce操作,或者统计操作。
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明显不同 -
劣势还是很明显的,函数体中计算两次,容易导致其他错误。
本文探讨了Java 8 Collectors.summingDouble方法在计算流中Double元素总和时的双重计算问题,分析了其优势与劣势,并揭示了在使用时可能遇到的陷阱,重点强调了性能优化和避免潜在错误的方法。

1289

被折叠的 条评论
为什么被折叠?



