Java中对象列表映射中的BigDecimal求和
我一直在用一些优雅的方法在地图中求出Java中对象列表映射中的BigDecimal求和,java,java-stream,bigdecimal,Java,Java Stream,Bigdecimal,我一直在用一些优雅的方法在地图中求出BigDecimals的总和。我知道如何计算BigDecimal映射中的和,但不知道如何计算具有BigDecimal的对象列表中的和 我的对象的结构如下所示: Class Obj { private BigDecimal b; // Getter for b, say getB() } Map<String, List<Obj>> myMap; 类Obj{ 私人银行; //b的Getter,比如getB() } 地图我的地图
BigDecimal
s的总和。我知道如何计算BigDecimal
映射中的和,但不知道如何计算具有BigDecimal
的对象列表中的和
我的对象的结构如下所示:
Class Obj {
private BigDecimal b;
// Getter for b, say getB()
}
Map<String, List<Obj>> myMap;
类Obj{
私人银行;
//b的Getter,比如getB()
}
地图我的地图;
我需要得到myMap
中所有b
s的总和。在Java中寻找一些优雅的方法来实现这一点,可能是使用streams
映射的值
BigDecimal
s列表流展平为BigDecimal
s列表流map
提取BigDecimal
sreduce
BinaryOperator
您还可以使用方法引用来代替上面的lambda:
BigDecimal::add
Awesome。谢谢这很有效。也可以使用BigDecimal::add代替(a,b)->a.add(b),或者使用.reduce(BigDecimal::add).orElse(BigDecimal.ZERO)
,这样可以节省一个操作。
BigDecimal sum = myMap.values()
.stream()
.flatMap(Collection::stream)
.map(Obj::getB)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sum = myMap.values()
.stream()
.flatMap(Collection::stream)
.map(Obj::getB)
.reduce(BigDecimal.ZERO, BigDecimal::add);