gpt4 book ai didi

java - 给定一个 HashMap,如何根据 Java 中的重复值过滤它

转载 作者:行者123 更新时间:2023-12-01 19:37:58 25 4
gpt4 key购买 nike

我有一个 HashMap,我需要过滤该映射或仅使用给定映射中包含重复值的键创建映射。请建议我们如何实现这一目标?

请注意给定的输入只是 map 。并且没有其他可搜索的值(value)。

      Map map = new HashMap();
map.put(1, "abc");
map.put(2, "def");
map.put(3, "mno");
map.put(4, "abc");
map.put(5, "ijk");
map.put(6, "abc");

Map result = new HashMap();
(1, "abc")
(4, "abc")
(6, "abc");

我期望一个包含所有具有重复值的键的新映射

最佳答案

您可以使用流来完成此操作。

首先,将条目分组在一起,以便具有相同值的条目放在一起:

Map<String, Map.Entry<Integer, String>> grouped =
map.entrySet().stream()
.collect(groupingBy(Map.Entry::getValue));

然后删除该值仅出现 1 次的条目:

grouped.values().removeIf(m -> m.size() <= 1);

然后再次将条目展平:

Map<Integer, String> result = grouped.values().stream()
.flatMap(m -> m.entrySet().stream())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));

您也可以在单个表达式中执行此操作:

Map<Integer, String> grouped =
map.entrySet().stream()
.collect(groupingBy(Map.Entry::getValue))
.values().stream()
.filter(m -> m.size() > 1)
.map(Map::entrySet)
.flatMap(Collection::stream)
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));

关于java - 给定一个 HashMap,如何根据 Java 中的重复值过滤它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671039/

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