Mic*_*el 3 java sum bigdecimal java-stream
我试图从a中加总多个BigDecimals List.目前,我正在使用两个流,但是如果可能的话,我希望只有一个流.我不确定如何以高效的方式重写下面的内容.
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);
Run Code Online (Sandbox Code Playgroud)
如您所见,流基本上是相同的,只有对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));
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做流逻辑了
ChargesAndFees totals = tableRowDataList.stream()
.map(el -> new ChargesAndFees(el.getSums().getCharges(),
el.getSums().getFees()))
.reduce(ChargesAndFees.ZERO, ChargesAndFees::add);
Run Code Online (Sandbox Code Playgroud)
如果你坚持,你可以将值转换totals为a Map.
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |