Collectors.summingDouble()

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明显不同

  • 劣势还是很明显的,函数体中计算两次,容易导致其他错误。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值