簡體   English   中英

如果Java 8樣式中存在值,如何從HashMap中刪除

[英]How to remove from a HashMap if value is present in Java 8 style

有一個Map<String, List<String>> 如果Map包含鍵,我想從List刪除一個值。

但有沒有辦法用Java 8風格做到這一點? 就像使用計算,合並或其他一些新方法?

以舊樣式方式從List中刪除元素的代碼:

public class TestClass {


    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        map.put("key1", getList());
        map.put("key2", getList());

        //remove
        if (map.containsKey("key1")) {
            map.get("key1").remove("a2");
        }
        System.out.println(map);
    }

    public static List<String> getList(){
        List<String> arr = new ArrayList<String>();
        arr.add("a1");
        arr.add("a2");
        arr.add("a3");
        arr.add("a4");

        return arr;
    }   
}

你可以使用Map.computeIfPresent()但改進是有問題的:

map.computeIfPresent("key1", (k, v) -> { v.remove("a2"); return v; });

我們沒有Java-8-ify的一切。 你的代碼很好。 但是,如果你願意,Karol的建議很好,這是另一個:

    Optional.ofNullable(map.get("key1")).ifPresent(v -> v.remove("a2"));

關於這是否是對Optional的錯誤使用,意見不一。 它當然不是它的主要用途,但我覺得它是可以接受的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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