java 8 Map api 學習

Map<String, String> map = new HashMap<>();
map.put("aa", "1");
map.put("bb", null);

1. compute (運算\消費)map中的某對值java

for (String item : map.keySet()) {
            System.out.println(map.compute(item, (key, val) -> key + "=" + val.toString()));
        }

結果:map中全部的值都參與計算。因此會出現空指針web

aa=1
Exception in thread "main" java.lang.NullPointerException
	at com.xy.pay.web.interceptor.AliPayNotifyInterceptor.lambda$main$0(AliPayNotifyInterceptor.java:48)
	at java.util.HashMap.compute(HashMap.java:1196)
	at com.xy.pay.web.interceptor.AliPayNotifyInterceptor.main(AliPayNotifyInterceptor.java:48)

 

2.computeIfPresent指針

for (String item : map.keySet()) {
            System.out.println(map.computeIfPresent(item, (key, val) -> key + "=" + val.toString()));
        }

結果:map 中value 爲空的值,不會參與運算。(不會產生空指針)code

aa=1
null

 

3.computeIfAbsentrem

System.out.println(map.computeIfAbsent("aa", (key) -> "key is " + key.toString()));
//結果1:1

 System.out.println(map.computeIfAbsent("cc", (key) -> "key is " + key.toString()));
//結果2: key is cc

說明:根據 key 判斷其value是否有值,若是爲nul則運算 lambda表達式 (結果2),不然返回其值(結果1)get

 

4. putIfAbsent  若是當前容器中的值爲 null 那麼就 執行 put操做。不然不操做it

 

5.  getOrDefault  若是爲空,返回默認值io

 

6. mergeclass

//1.使用值"2"去替換原來的值,若是原來的值爲空,則直接替換。不然使用lambda表達式的值
//2.若是替換的值爲null,則執行remove 操做 
//3.返回替換的值
map.merge("bb", "2", (oldVal, newVal) -> newVal);

結果: 「bb」 = "2"thread

相關文章
相關標籤/搜索