簡體   English   中英

我可以通過Keyset修改Map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM