我正在尝试将过滤器应用于地图。目的是仅保留作为集合一部分的那些键。以下实现确实提供了所需的结果,但我想知道这是否正确?
private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
Set<String> keys = properties.keySet();
keys.retainAll(filterSet);
}
答案 0 :(得分:5)
是!
该集由地图支持,因此对地图的更改会反映在集合中,反之亦然
(见:http://download.oracle.com/javase/1.4.2/docs/api/java/util/Map.html#keySet%28%29)
答案 1 :(得分:2)
Itay's answer是正确的,但是您应确保properties
未被其他线程修改,或者本身是一个线程安全的Map
实现。
如果Map
不是线程安全的(例如HashMap)并且被其他线程修改,则可能会ConcurrentModificationException
。
答案 2 :(得分:0)
你的代码看起来不错。您可以将一行写为properties.keySet().retainAll(filterSet);
我看到的一个问题是地图可能无法修改。如果这是一种可能性,那么可能会使用原始条目集构建一个新地图,然后过滤并返回它将是一个更好的选择。