簡體   English   中英

使用 Java Stream API 采集映射

[英]Collecting to map using Java Stream API

這是我需要收集的類對象:

public class InvestBalance {

    @JsonValue
    private List<Balance> balances;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Balance {

        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate date;

        private BigDecimal value;
    }
}

我從數據庫中得到了一個List<InvestBalance.Balance> ,我需要按date字段對它們進行分組,所以我需要得到一個Map<LocalDate, BigDecimal> 值必須是 bigDecimals 的總和。 我如何使用 Java Stream API 做到這一點?

list.stream()
   .collect(Collectors.groupingBy(Balance::getDate,
                       Collectors.mapping(Balance::getValue, 
                                  Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)));

或者靜態導入 Collectors.* 以使其更具可讀性:

list.stream()
   .collect(groupingBy(Balance::getDate, 
                    mapping(Balance::getValue, reducing(BigDecimal.ZERO, BigDecimal::add)));

您可以使用Collectors.toMap收集為Map

Map<LocalDate, BigDecimal> res = 
      list.stream()
          .collect(Collectors.toMap(Balance::getDate, Balance::getValue, BigDecimal::add));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM