java映射的merge、compute、computeIfAbsent、computeIfPresent的使用


  merge、compute、computeIfAbsent、computeIfPresent是java8中的語法。

  merge:通過構建BiFunction或則是調用java中的一些函數來操作merge參數中的變量。

  compute:通過構建BiFunction或則使用lambda表達式來操作參數中的變量,這里無論key是否存在都會執行后面的方法

  computeIfAbsent,computeIfPresent:前一個是當key不存在是則執性后面的方法,后一個是存在時執行后面的方法。

 

  下面是對方法使用的源碼:(源碼來自:https://blog.csdn.net/russle/article/details/79772198

 

 1 package jihe;
 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 import java.util.function.BiFunction;
 6 
 7 public class MapMain {
 8     public static void main(String[] args) {
 9         Map<String, String> myMap = new HashMap<>();
10         String keyA = "A";
11         String keyB = "B";
12         String keyC = "C";
13         String keyD = "D";
14         String keyE = "E";
15         String keyF = "F";
16         String keyG = "G";
17         String keyH = "H";
18         myMap.put(keyA, "str01A");
19         myMap.put(keyB, "str01B");
20         myMap.put(keyC, "str01C");
21         
22         System.out.println("myMap initial content:"+ myMap);
23         
24         myMap.merge(keyA, "merge01", String::concat);
25         myMap.merge(keyD, "merge01", String::concat);
26         System.out.println("Map merge demo content:"+ myMap);
27         
28         BiFunction<String, String, String> biFunc = new BiFunction<String, String, String>(){
29             @Override
30             public String apply(String t, String u) {
31                 String result = t;
32                 if (t == null) {
33                     result = u;
34                 }
35                 else {
36                     result += "," + u;
37                 }
38                 return result;
39             }
40         };
41         
42         myMap.merge(keyA, "BiFuncMerge01", biFunc);
43         myMap.merge(keyE, "BiFuncMerge01", biFunc);
44         System.out.println("merge"+ myMap);
45         
46         String msg = "msgCompute";
47         myMap.compute(keyB, (k, v) -> (v == null) ? msg : v.concat(msg));
48         myMap.compute(keyF, (k, v) -> (v == null) ? msg : v.concat(msg));
49         System.out.println("compute"+ myMap);
50         
51         myMap.computeIfAbsent(keyC, k -> genValue(k));
52         myMap.computeIfAbsent(keyG, k -> genValue(k));
53         System.out.println("computeIfAbsent"+ myMap);
54         
55         myMap.computeIfPresent(keyC, biFunc);
56         myMap.computeIfPresent(keyH, biFunc);
57         System.out.println("computeIfPresent"+ myMap);
58     }
59     
60     static String genValue(String str) {  
61         System.out.println("===");  
62         return str + "2";  
63     }  
64 
65 }

輸出的結果為:

myMap initial content:{A=str01A, B=str01B, C=str01C}
Map merge demo content:{A=str01Amerge01, B=str01B, C=str01C, D=merge01}
merge{A=str01Amerge01,BiFuncMerge01, B=str01B, C=str01C, D=merge01, E=BiFuncMerge01}
compute{A=str01Amerge01,BiFuncMerge01, B=str01BmsgCompute, C=str01C, D=merge01, E=BiFuncMerge01, F=msgCompute}
===
computeIfAbsent{A=str01Amerge01,BiFuncMerge01, B=str01BmsgCompute, C=str01C, D=merge01, E=BiFuncMerge01, F=msgCompute, G=G2}
computeIfPresent{A=str01Amerge01,BiFuncMerge01, B=str01BmsgCompute, C=C,str01C, D=merge01, E=BiFuncMerge01, F=msgCompute, G=G2}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM