在Java中的对象列表映射中总结BigDecimal



我坚持使用一些优雅的方法在地图中获取BigDecimal的总和。我知道如何计算BigDecimal地图中的总和,但不知道带有BigDecimal的对象列表。

我的对象的结构如下:

Class Obj {
  private BigDecimal b;
  // Getter for b, say getB()
}
Map<String, List<Obj>> myMap;

我需要得到myMap中所有b的总和.寻找一些优雅的方法在 Java 中做到这一点,可能是使用流?

  1. 流式传输Map的值。
  2. 使用 flatMapBigDecimal 的列表流平展为BigDecimal 的流。
  3. 使用map提取BigDecimal
  4. reduce与求和操作一起使用。
BigDecimal sum = myMap.values().stream()
            .flatMap(List::stream)
            .map(Obj::getB)
            .reduce(BigDecimal.ZERO, (a, b) -> a.add(b) );

Stream.reduce 方法采用标识值(用于对值求和,零(和一个将中间结果相加的BinaryOperator

您也可以使用方法引用来代替上面的 lambda:BigDecimal::add

BigDecimal sum = myMap.values()
    .stream()
    .flatMap(Collection::stream)
    .map(Obj::getB)
    .reduce(BigDecimal.ZERO, BigDecimal::add);

最新更新