gpt4 book ai didi

java - 使用 Java 8 Streams 转换 Java 中的映射 - 根据映射的值隔离映射

转载 作者:行者123 更新时间:2023-12-01 17:22:55 26 4
gpt4 key购买 nike

我有一个 Java map :

Map<String, Set<EntityObject>> itemGroupsMap

class EntityObject {
boolean isParent;
String groupId;
}

现在我想将 itemGroupsMap Map --- 转换为 ---:

Map<EntityObject, Set<EntityObject>> parentChildMap.

要做的逻辑是,itemGroupsMap -> Set -> 此 Set 中的每个条目都将有一个 EntityObject 作为父级 (EntityObject.isParent=1)。因此,对于映射中的每个条目,我必须找到父 EntityObject 并将其作为 parentChildMap 的键,并仅将其余的 entitiObjects 作为 Set/List 到此关键。

我尝试过使用 2 个 foreach 循环,而且我对 Java 8 还很陌生,所以我正在寻找如何使用流来减少代码?

我查看了 Collectors.partitioningBy 但它创建了 2 个带有 0、1 键的映射。我真的不需要那个。

有什么建议吗?

最佳答案

也许是这样的:

Map<EntityObject, Set<EntityObject>> newMap = itemGroupsMap.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getValue().stream().filter(value -> value.isParent).findFirst().orElse(null),
Map.Entry::getValue
));

注意:他的代码不关心没有父级的初始 map 中的数据集 -> entry.getValue().stream().filter( value -> value.isParent).findFirst().orElse(null), 它告诉:当集合中没有父项时,将 null 设置为键。因此,如果可能的话,那么每一个没有父项的集合都会被下一个没有父项的集合覆盖。

关于java - 使用 Java 8 Streams 转换 Java 中的映射 - 根据映射的值隔离映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61259980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com