[英]Can I modify a Map through Keyset
我正在嘗試將過濾器應用於Map。 目的是僅保留作為集合一部分的那些鍵。 以下實現確實提供了所需的結果,但我想知道這是否是正確的方法?
private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
Set<String> keys = properties.keySet();
keys.retainAll(filterSet);
}
是!
該集由地圖支持,因此對地圖的更改將反映在集中,反之亦然
(參見: https : //docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html#keySet() )
Itay的答案是正確的,但是你應該確保其他線程不修改properties
,或者它本身是一個線程安全的Map
實現。
如果Map
不是線程安全的(例如HashMap)並且被其他線程修改,則可能會獲得ConcurrentModificationException
。
你的代碼看起來不錯。 您可以將一行寫為properties.keySet().retainAll(filterSet);
我看到的一個問題是地圖可能無法修改。 如果這是一種可能性,那么可能會使用原始條目集構建一個新地圖,然后過濾並返回它將是一個更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.