加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读