【问题标题】:How to collect object using Collectors.toMap if the key is inside a list of child property? [duplicate]如果键在子属性列表中,如何使用 Collectors.toMap 收集对象? [复制]
【发布时间】:2020-10-08 20:03:21
【问题描述】:
class MyObject {
  private List<MyChildObject> children;
}
class MyChildObject {
  private String key;
}

我的目标是将MyObject 的列表转换为Map&lt;String, MyObject&gt;,其中StringMyChildObject.key

我的尝试停在myObjectList.stream().collect(Collectors.toMap(//how to extract key here?, Function.identity()));

谢谢。

【问题讨论】:

  • 我觉得很奇怪,因为MyObject 包含一个子列表,其中每个子都有自己的key
  • 列表的哪个键?第一个,最后一个,任意一个,随机一个?如果列表为空会怎样?
  • 我需要将父对象映射到其每个子对象的键。

标签: java java-stream java-11


【解决方案1】:

您可以使用flatMap 将Children 展平以制作Children 的钥匙和MyObject 对,然后使用Collectors.toMap 收集为地图

myObjectList.stream()
            .flatMap(e -> e.getChildren()
                           .stream()
                           .map(c -> new AbstractMap.SimpleEntry<>(c.getKey(), e)))
            .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

【讨论】:

  • 太好了,谢谢。我想这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多