java将一个列表组的字段(bigdecimal)乘以2个字段

bqujaahr  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(332)

这个问题在这里已经有答案了

在Java8中按多个字段名分组(8个答案)
上个月关门了。
我有一份清单:

public class Dto {
    private Integer id;
    private String text;
    private BigDecimal price;
}

我试过:

Map<String, Map<Integer, List<Dto>>> map =
            list.stream()
                .collect(
                     Collectors.groupingBy(
                     Dto::getText,
                     Collectors.groupingBy(Dto::getId)));

但这并没有给出bigdecimal字段的和
此外,我希望回报结构如下:

List<SumDto>

public class SumDto {
      private Integer id;
      private String text;
      private BigDecimal sum;
}

我怎样才能做到这一点?非常感谢你

qvtsj1bj

qvtsj1bj1#

你什么都没有求和,所以你哪里都看不到和。你必须告诉我 Collectors.groupingBy 如何减少下游的元素。否则,它会创建一个 List 默认情况下。
你可以这样做:

Map<String, Map<Integer, BigDecimal>> map = list.stream()
    .collect(Collectors.groupingBy(
             Dto::getText, 
             Collectors.groupingBy(
                        Dto::getId, 
                        Collectors.reducing(
                                   BigDecimal.ZERO,
                                   Dto::getPrice, 
                                   BigDecimal::add))));

至于回报结构,我将把它作为练习;)

相关问题