java - 使用 Java 8 流对象将列表对象转换为自定义映射

标签 java java-8 java-stream

我有一个类“First”,其中包含对类“Second”的引用作为列表。我正在尝试通过使用 Stream(或)flap Map(或)groupingBy 以 Java 8 的方式实现以下 block

foreach(First a: listOfFirst){
    for (Second b: a.getSecondDetails()) {
        inputMap.put(b, a);
    }
}

我尝试了以下简化方式

listOfFirst.stream()
    .flatMap(p -> p.getSecondDetails().stream())
    .collect(Collectors.toMap(p -> p, q -> q));

我在这里遗漏了一些东西,请帮助我

最佳答案

你需要“记住”每个Second实例对应的First实例。例如,您可以通过创建 Map.Entry 实例来做到这一点:

Map<Second,First> result =
    listOfFirst.stream()
               .flatMap(p->p.getSecondDetails()
                            .stream()
                            .map(sec -> new SimpleEntry<>(sec,p))
               .collect(Collectors.toMap(Map.Entry::getKey,
                                         Map.Entry::getValue));

关于java - 使用 Java 8 流对象将列表对象转换为自定义映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55216461/

相关文章:

java - 将 Java Stream 过滤为 1 个且仅 1 个元素

java - "infinite"迭代器的设计是否糟糕?

java - 我可以在流式传输时向集合中添加新对象吗?

java - 枚举映射和流

java - 如何在 Stream 上短路 reduce?

java - 从 Collectors.partitioningBy 返回非类类型

java - SpringIntegration - 如果满足条件如何运行 2 个查询

java - 在 JSP 中使用自定义 i18n 标签表示法是否可行?

java - 如何将 Activity 转换为图像

JavaFX cas 文件版本错误