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()));