java – 将多个BigDecimals与Map相加
发布时间:2020-12-15 04:39:09 所属栏目:Java 来源:网络整理
导读:我试图从List中加总多个BigDecimals.目前,我正在使用两个流,但是如果可能的话,我希望只有一个流.我不确定如何以高效的方式重写下面的内容. BigDecimal totalCharges = tableRowDataList.stream() .map(el - el.getSums().getCharges()) .reduce(BigDecimal.Z
我试图从List中加总多个BigDecimals.目前,我正在使用两个流,但是如果可能的话,我希望只有一个流.我不确定如何以高效的方式重写下面的内容.
BigDecimal totalCharges = tableRowDataList.stream() .map(el -> el.getSums().getCharges()) .reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal totalFees = tableRowDataList.stream() .map(el -> el.getSums().getFees()) .reduce(BigDecimal.ZERO,BigDecimal::add); 如您所见,流基本上是相同的,只有对getCharges / getFees的调用不同. 获得结果Map< String,BigDecimal>的最佳方法是什么?从上面? (关键是收费/费用) 解决方法
首先,您创建一个用于收集结果的类.
然后你就像BigDecimal那样做,即ZERO常量和add()方法. public class ChargesAndFees { private static final ZERO = new ChargesAndFees(BigDecimal.ZERO,BigDecimal.ZERO); private final BigDecimal charges; private final BigDecimal fees; // constructor and getters public ChargesAndFees add(ChargesAndFees that) { return new ChargesAndFees(this.charges.add(that.charges),this.fees.add(that.fees)); } } 现在你可以做流逻辑了 ChargesAndFees totals = tableRowDataList.stream() .map(el -> new ChargesAndFees(el.getSums().getCharges(),el.getSums().getFees())) .reduce(ChargesAndFees.ZERO,ChargesAndFees::add); 如果您坚持,则可以将总计中的值转换为Map. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- clojure – leiningen:关于“lein run”/“lein uberjar”
- java – 为什么我们必须为@SuppressWarnings使用中间变量(“
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务
- java 查询oracle数据库所有表DatabaseMetaData的用法(详解)
- Mybatis防止sql注入的实例
- 为什么java 8 lambdas允许访问非final类变量?
- java – 异常不与throws子句兼容的原因是什么?
- java – 无法在Recyclerview上播放视频
- java – 尝试使用Google Blogger API OAuth2创建帖子时发生
- Java Generics:如何为泛型类型指定Class类型?