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