我试图删除HashMap中除指定的一组键之外的所有条目。 例如,说HashMap numToalphaMap具有条目1 - > a,2 - > b,3 - > c,4 - > d。给定KeySet是{1,2}。我想从numToalphaMap中删除其他条目,即..,(3 - > c,4 - > d)。有人可以帮我这个吗?
答案 0 :(得分:4)
最简单的方法(在Java 8中)只是删除不在keySet
中的任何键:
map.keySet().removeIf(k -> !keySet.contains(k));
答案 1 :(得分:1)
如果您使用的是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();
}
}
答案 2 :(得分:1)
出于性能考虑,您可以首先确定您可以保留的密钥集是大还是小。如果只是它很小,你可以创建一个新的HashMap并在新的HashMap中分配键值对。否则,您可以迭代并删除不在集合中的那些:
for (Map.Entry<String, String> entry : map.entrySet()) {
if (keySet.contains(entry.getKey())) {
entry.remove();
}
}