英文:
How to collect object using Collectors.toMap if the key is inside a list of child property?
问题
class MyObject {
private List<MyChildObject> children;
}
class MyChildObject {
private String key;
}
我的目标是将一个 `MyObject` 列表转换为一个 `Map<String, MyObject>`,其中 `String` 是 `MyChildObject.key`。
我的尝试在 `myObjectList.stream().collect(Collectors.toMap(//如何在这里提取键?, Function.identity()));` 处停止了。
谢谢。
英文:
class MyObject {
private List<MyChildObject> children;
}
class MyChildObject {
private String key;
}
My goal is to transfor a list of MyObject
to a Map<String, MyObject>
which String
is MyChildObject.key
.
My attempt stopped at myObjectList.stream().collect(Collectors.toMap(//how to extract key here?, Function.identity()));
Thanks.
答案1
得分: 4
可以使用 flatMap
来展开 Children,将 Children 的键和 MyObject
对进行配对,然后使用 Collectors.toMap
将其收集为 Map。
myObjectList.stream()
.flatMap(e -> e.getChildren()
.stream()
.map(c -> new AbstractMap.SimpleEntry<>(c.getKey(), e)))
.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
英文:
You can use flatMap
to flatten the Children to make Children's key and MyObject
pair then collect as Map using 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()));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论