有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java将列表组的字段(BigDecimal)乘以2个字段求和

我有一份清单:

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;
}

我怎样才能做到这一点?多谢各位


共 (1) 个答案

  1. # 1 楼答案

    你没有求和,这就是为什么你在任何地方都看不到和。你必须告诉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))));
    

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