import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.CountDownLatch;
public class MapTestInJava8 {
public static Map<String, String> map = new HashMap<>();
static {
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
}
public static void main(String[] args) {
// compute();
merge();
}
/**
* 使用lambda表达式的计算结果赋值到给定的key上
* (k,v)-{} k为入参Key的值,即给定的Key。v为给定key在原Map中的旧值。
* compute方法返回值为入参Key的最终值
*/
public static void compute(){
String result = map.compute("A", (k, v) -> {
System.out.println(k); // A
System.out.println(v); // null
return "aa";
});
System.out.println(result); // aa
String result1 = map.compute("a", (k, v) -> {
System.out.println(k); // a
System.out.println(v); // A
return "bb";
});
System.out.println(result1); // bb
System.out.println(map); // {A=aa, a=bb, b=B, c=C}
}
/**
* 当入参Key不存在时,执行lambda表达式计算,将计算结果赋值到入参Key
* (k)->{} k为入参Key的值
* computeIfAbsent方法返回值为入参Key的最终值
*/
public static void computeIfAbsent(){
String result = map.computeIfAbsent("a", (k) -> {
System.out.println(k); // 未执行
return k;
});
System.out.println(result);// "A"
String result1 = map.computeIfAbsent("aa", (k) -> {
System.out.println(k);// "aa"
return k.toUpperCase();
});
System.out.println(result1);// "AA"
}
/**
* 当入参Key存在时,执行lambda表达式计算,将计算结果赋值到入参Key
* (k,v)-{} k为入参Key的值,即给定的Key。v为给定key在原Map中的旧值。
* computeIfPresent 方法返回值为入参Key的最终值
*/
public static void computeIfPresent(){
String result = map.computeIfPresent("a", (k,v) -> {
System.out.println(k); // "a"
System.out.println(v); // "A"
return k + v;
});
System.out.println(result);// "aA"
String result1 = map.computeIfPresent("aa", (k,v) -> {
System.out.println(k);// 未执行
System.out.println(v);// 未执行
return k.toUpperCase();
});
System.out.println(result1);// "null"
}
/**
* 使用给定的Value覆盖入参Key对应的旧Value
* put方法出参为原Map中的旧值
*/
public static void put(){
String result = map.put("a" , "aaa");
System.out.println(result);// "A"
String result1 = map.put("A", "a");
System.out.println(result1);// "null"
}
/**
* 当入参Key不存在时,使用给定的Value覆盖入参Key对应的旧Value
* put方法出参为原Map中的旧值
*/
public static void putIfAbsent(){
String result = map.putIfAbsent("a" , "aaa");
System.out.println(result);// "A"
System.out.println(map.size()); // 3
String result1 = map.putIfAbsent("A", "a");
System.out.println(result1);// "null"
System.out.println(map.size()); // 4
}
/**
* 使用给定的Value与入参Key对应的旧值进行合并
* (v1,v2)->{} v1为入参Key对应的旧值 v2为入参给定的value值
* merge方法返回值为入参Key的最终值
*/
public static void merge(){
String result = map.merge("a" , "aaa", (v1,v2)->{
System.out.println(v1); // "A"
System.out.println(v2); // "aaa"
return v1+v2;
});
System.out.println(result); // "Aaaa"
}
}