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}
