Java 如果键位于子属性列表中,如何使用Collectors.toMap收集对象? 类MyObject{ 私人名单儿童; } 类MyChildObject{ 私钥; }

Java 如果键位于子属性列表中,如何使用Collectors.toMap收集对象? 类MyObject{ 私人名单儿童; } 类MyChildObject{ 私钥; },java,java-stream,java-11,Java,Java Stream,Java 11,我的目标是将MyObject列表转换为Map,其中String是MyChildObject.key 我的尝试在myObjectList.stream().collect(Collectors.toMap(//how to extract key here?、Function.identity())处停止 谢谢。您可以使用flatMap展平子对象,使子对象与MyObject成对,然后使用收集器收集为映射。toMap class MyObject { private List<MyChil

我的目标是将
MyObject
列表转换为
Map
,其中
String
MyChildObject.key

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


谢谢。

您可以使用
flatMap
展平子对象,使子对象与
MyObject
成对,然后使用
收集器收集为映射。toMap

class MyObject {
  private List<MyChildObject> children;
}
class MyChildObject {
  private String key;
}
myObjectList.stream()
.flatMap(e->e.getChildren()
.stream()
.map(c->newAbstractMap.SimpleEntry(c.getKey(),e)))
.collect(Collectors.toMap(e->e.getKey(),e->e.getValue());

对我来说很奇怪,因为
MyObject
包含一个列表子项,每个子项都有自己的
键。列表中的哪个键?第一个,最后一个,任意的,随机的?如果列表为空会发生什么?我需要将父对象映射到其每个子对象的键。太好了,谢谢。我想这就是我要找的。
myObjectList.stream()
            .flatMap(e -> e.getChildren()
                           .stream()
                           .map(c -> new AbstractMap.SimpleEntry<>(c.getKey(), e)))
            .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));