gpt4 book ai didi

java - 将多个 BigDecimals 求和到一个 Map

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:42 27 4
gpt4 key购买 nike

我正在尝试对 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);

如果您坚持,可以将 totals 中的值转换为 Map

关于java - 将多个 BigDecimals 求和到一个 Map<String, BigDecimal>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44393371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com