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}

 

转载于:https://www.cnblogs.com/bbg123/p/10791014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值