当前位置: 首页 > 知识库问答 >
问题:

Java 8流函数分组映射值为映射的地方

葛越泽
2023-03-14

我试图收集一个列表的结果,并将它们组织成一个地图,其中的值是一个地图:

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()对于列表中的不同值是相同的。

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)

映射中包含的值应为:

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)))时;会删除其中一个条目

共有1个答案

黄骏喆
2023-03-14

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

private Map<Organisation, Map<LocalDate, List<Status>>> getSummaries(final List<Status> summaries) {
    return summaries
            .stream()
            .collect(groupingBy(Status::getOrganisation, groupingBy(Status::getProcessedDate)));
}
 类似资料:
  • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。

  • 我正在从文件中读取值并获取列表。如下- 一旦我得到这个

  • 给定以下类的,使用Java 8 lambda,我希望获得的,每个帐户类型一个。 到目前为止,我使用以下代码按对进行分组。 如何返回,将列表从每个映射键传递到构造函数中,其中包含每个中的一个?

  • 我有映射键作为字符串和值作为列表。列表可以有10个唯一值。我需要转换这个映射键为整数和值为列表。示例如下: 输入: 2:“钥匙-1”,“钥匙-2” 3:“钥匙-1”、“钥匙-2”、“钥匙-3” 4:“钥匙-1”、“钥匙-2”、“钥匙-3”

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?