Java map int double_mapToDouble()真的有必要与Java 8流合计一个列表吗?

就我可以告诉,总和列表使用Java 8流是这样的:

List vals = . . . ;

double sum = vals.stream().mapToDouble(Double::doubleValue).sum();

对我来说,mapToDouble(double :: doubleValue)似乎是一种crufty – 只是那种样板“仪式”,lambda和stream应该免除。

最佳做法告诉我们喜欢List实例对数组,但是对于这种求和,数组看起来更干净:

double[] vals = . . . ;

double sum = Arrays.stream(vals).sum();

授予,可以这样做:

List vals = . . . ;

double sum = vals.stream().reduce(0.0, (i,j) -> i+j);

但是reduce(….)比sum()长得多。

我得到这与流需要改进围绕Java的非对象原语的方式,但仍然,我错过了这里的东西吗?有没有办法挤压自动装箱,使这个更短?或者这只是当前的艺术状态?

更新 – 答案摘要

这里是一个下面的答案摘要。虽然我在这里有一个总结,我敦促读者仔细阅读答案。

@dasblinkenlight解释说,某种类型的解包将总是必要的,由于在Java的历史上做出的决定,特别是在仿制实现方式和它们与非对象原语的关系。他指出,在理论上,编译器可能直观的解开并允许更简单的代码,但这还没有实现。

@Holger显示了一个非常接近我所问的表达性的解决方案:

double sum = vals.stream().reduce(0.0, Double::sum);

我不知道新的静态Double.sum()方法。添加1.8,它似乎是为了我的描述的目的。我也发现Double.min()和Double.max()。今后,我一定会使用这个成语在List< Double>和类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值