当前位置: 首页 > 知识库问答 >
问题:

从Hash Map中删除除指定Key集之外的所有条目

松茂实
2023-03-14

我试图删除HashMap中除指定密钥集之外的所有条目。例如,假设HashMap numToalphaMap有条目1--

共有3个答案

江佐
2023-03-14

出于性能考虑,您可以首先确定可以保留的键集是大还是小。如果它很小,您可以创建一个新的HashMap并在新HashMap中分配键值对。否则,您可以迭代并删除不在集合中的键值,如下所示:

for (Map.Entry<String, String> entry : map.entrySet()) {
   if (keySet.contains(entry.getKey())) {
     entry.remove();
   }
}
苏骏
2023-03-14

如果您使用的是Java 8,那么下面的解决方案呢?

    Set<Integer> keysToKeep = new HashSet<>();
    keysToKeep.add(1);
    keysToKeep.add(2);

    Map<Integer, String> intToStringMap = new HashMap<>();
    intToStringMap.put(1, "a");
    intToStringMap.put(2, "b");
    intToStringMap.put(3, "c");
    intToStringMap.put(4, "d");


    Map<Integer, String> filteredMap = 
            intToStringMap.entrySet().stream()
            .filter(x -> keysToKeep.contains(x.getKey()))
            .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

Java 7版本:

    Iterator<Map.Entry<Integer, String>> entryIterator = intToStringMap.entrySet().iterator();

    while (entryIterator.hasNext()) {
        Map.Entry<Integer, String> entry = entryIterator.next();
        if(!keysToKeep.contains(entry.getKey())) {
            entryIterator.remove();
        }
    }
伊锦
2023-03-14

最简单的方法(在Java 8中)就是删除所有不在keySet中的键:

map.keySet().removeIf(k -> !keySet.contains(k));
 类似资料:
  • 问题内容: 我需要从数据库中删除除前两个选定日期以外的所有日期: 我想在一个查询中删除除前两个日期以外的所有日期。 问题答案:

  • 问题内容: 我编入索引的Elasticsearch文档包含许多字段。我一直在使用match_all查询来获取结果。我想从match_all中排除一些字段,这可能吗? 问题答案: 在Elasticsearch中,您可以使用部分字段来过滤字段。 例:

  • 我在Java中有一个< code>HashMap: 我需要的是删除重复条目(“1”,1)[当键和值都重复时]。我搜索并只找到了“如何删除重复的键/值”。有人能帮忙吗?

  • 我需要为我的QGIS项目加载几个矢量层,这样我就可以在每个层中测试我的脚本的每个功能。然而,最后我想只做一两层兴趣,而放弃其他的,所以我想自动做。 我用一些层成功地做到了这一点,但有一层给我带来了问题,我还没有弄清楚原因。 这里有一些代码: 加载层(几乎可以肯定,这不是问题): 现在,我创建了这个函数来删除所有加载的层,除了我想使用的层。,这仅仅是因为我试图理解这个问题。 然后,我创建了一个新的层

  • del key1 key2 ....keyN 返回1表示存在,0不存在

  • 我想知道如何使用正则表达式删除除所有图像标记之外的所有内容。 我已经试过了: (?s)^[^ (?s)^([^ 有谁知道如何将这 2 个组合为多个图像? 下面是我想应用它的内容示例: 我期望的结果应该是: