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

标签 java filter hashmap duplicates

我有一个 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/

相关文章:

java - 奇怪的 HashMap 结果 - Java,Hadoop

java - Nexus 3 Rest api 检查组件是否存在

python - Pandas DataFrame 上的循环过滤器不起作用

java - 即使定义了类和参数,Java也找不到符号错误?

arrays - 如果属性值存在于另一个对象数组中,则快速过滤对象数组

swift - 基于另一个过滤数组

android - 尝试从 HashMap 字符串获取 Double 值时出错,从 Firebase 获取的对象

java - 增量数学问题

java - 使用ImageIO读取JCS_YCCK图像

java - Apache Tomcat 9 未在 Eclipse 服务器运行时环境中显示