gpt4 book ai didi

Java 8 Stream 函数分组到 Map,其中值是 Map

转载 作者:行者123 更新时间:2023-12-02 18:18:23 25 4
gpt4 key购买 nike

我正在尝试收集列表的结果并将它们组织到一个 map 中,其中值是一个 map :

private Map<Organisation, Map<LocalDate, Status>> getSummaries(final List<Status> summaries) {
return summaries
.stream()
.collect(groupingBy(Status::getOrganisation,
toMap(Status::getProcessedDate, Function.identity())));
}

我收到 java.lang.IllegalStateException: Duplicate key 错误,因为 getProcessedDate() 对于列表中的不同值是相同的。

有没有办法可以将具有相同processeddate的多个对象合并到 map 中?

例如,假设我的列表中有这些对象:

Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=OK, statusCount=5)
Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=FAILED, statusCount=2)
Summary(ProcesseDate=2020-01-30, Organisation=APPLE, status=OK, statusCount=5)
Summary(ProcesseDate=2020-01-30, Organisation=APPLE, status=REJECTED, statusCount=5)

map 中包含的值应该是:

key=ABC
value { key=2020-01-30, value= Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=OK, statusCount=5), Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=FAILED, statusCount=2) }

当我尝试 toMap(Status::getProcessedDate, Function.identity(), (v1, v2) -> v2))); 它删除了其中一个条目

最佳答案

如果您不想合并数据并且没有唯一键,您可能只是在寻找嵌套分组:

private Map<Organisation, Map<LocalDate, List<Status>>> getSummaries(final List<Status> summaries) {
return summaries
.stream()
.collect(groupingBy(Status::getOrganisation, groupingBy(Status::getProcessedDate)));
}

关于Java 8 Stream 函数分组到 Map,其中值是 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com