我想將過濾器應用於地圖。目的是隻保留那些屬於一個集合的鍵。以下實現提供了所需的結果,但我想知道這是否正確?我可以修改通過鍵集的地圖嗎
private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
Set<String> keys = properties.keySet();
keys.retainAll(filterSet);
}
我想將過濾器應用於地圖。目的是隻保留那些屬於一個集合的鍵。以下實現提供了所需的結果,但我想知道這是否正確?我可以修改通過鍵集的地圖嗎
private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
Set<String> keys = properties.keySet();
keys.retainAll(filterSet);
}
是的!
set受映射支持,所以映射的變化也反映在集,反之亦然
(參見:http://download.oracle.com/javase/1.4.2/docs/api/java/util/Map.html#keySet%28%29)
Itay's answer是正確的,但是你應確保properties
未被其他線程修改,或者本身是線程安全的Map
實現。
如果Map
是不是線程安全的(例如,HashMap中),並通過其他線程你可能會得到ConcurrentModificationException
修改。
你的代碼看起來不錯。你可以寫一行爲properties.keySet().retainAll(filterSet);
我看到的一個問題是地圖可能是不可修改的。如果這是一種可能性,那麼可能用原始條目設置一個新地圖,然後過濾並返回它將是一個更好的選擇。