繁体   English   中英

删除所有条目,但从哈希映射中删除指定的密钥集

[英]Delete all the entries but the specified Key set from Hash Map

我试图删除HashMap中除指定的键集之外的所有条目。 例如,说HashMap numToalphaMap具有条目1 - > a,2 - > b,3 - > c,4 - > d。 给定KeySet是{1,2}。 我想从numToalphaMap中删除其他条目,即..,(3 - > c,4 - > d)。 任何人都可以帮我这个吗?

最简单的方法(在Java 8中)只是删除不在keySet任何键:

map.keySet().removeIf(k -> !keySet.contains(k));

如果您使用的是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();
        }
    }

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

for (Map.Entry<String, String> entry : map.entrySet()) {
   if (keySet.contains(entry.getKey())) {
     entry.remove();
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM