Java8的Stream中的Collectors操作求double类型和的坑
无敌踩坑王的我又双叒叕来了!!!!!!
例子:
@Test
public void testSumDouble() {
double a = 0.001;
double b = 0.002;
double c = 0.004;
List<Double> doubleList = new ArrayList<>();
doubleList.add(a);
doubleList.add(b);
double sum = doubleList.stream().collect(Collectors.summarizingDouble(Double::shortValue)).getSum();
System.out.println(sum);
if (c > sum) {
System.out.println("sum:" + sum + "小于" + "c:" + c);
}
}
一、场景,统计double类型的数值进行计算
二、计算
感觉这个结果应该是什么样子的?
是不是应该输出的是小于的
是的,输出的就是小于的,但是值确是这样的
0.0
sum:0.0小于c:0.004
是不是与预期的不符?
接下来我们看一下他的底层的定义
计算用的方法
Collectors.summarizingDouble(Double::shortValue)
summarizingDouble实现的方法
public static <T>
Collector<T, ?, DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper) {
return new CollectorImpl<T, DoubleSummaryStatistics, DoubleSummaryStatistics>(
DoubleSummaryStatistics::new,
(r, t) -> r.accept(mapper.applyAsDouble(t)),
(l, r) -> {
l.combine(r); return l; }, CH_ID);
}
DoubleSummaryStatistics 类的代码
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.util;
import