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}