破产是一种暂时的困境,贫困是一种思想的状态。——比尔·盖茨
今天在Map
中看到了这样一个函数:compute
于是做了点测验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Map<String, String> map = MapUtil.newHashMap(); map.put("123", "456"); map.put("789", "123"); System.out.println("如果存在就执行,并将结果作为value放入map"); map.computeIfPresent("1234", (k, v) -> v + "1 ");
System.out.println(map); map.computeIfPresent("123", (k, v) -> v + "2 ");
System.out.println(map); map.computeIfPresent("123", (k, v) -> null);
System.out.println(map); map.computeIfPresent("1234", (k, v) -> null);
System.out.println(map); System.out.println("如果缺省就执行,将key作为后方Function的参数,将结果作为value放入map"); map.computeIfAbsent("789", v -> v + "3 ");
System.out.println(map); map.computeIfAbsent("123", k -> k + "4 ");
System.out.println(map); map.computeIfAbsent("1234", k -> null);
System.out.println(map); map.computeIfAbsent("123", k -> null);
System.out.println(map); System.out.println("执行后方逻辑,并将结果作为value放入map"); map.compute("123", (k, v) -> v + "5 ");
System.out.println(map); map.compute("1234", (k, v) -> v + "6 ");
System.out.println(map); map.compute("123", (k, v) -> null);
System.out.println(map); map.compute("12345", (k, v) -> null);
System.out.println(map);
|
现在基本理解了compute
、computeIfPresent
、computeIfAbsent
的使用了:
以下方法放入map
时的key
均为方法第一个参数
compute
:
返回值状态 |
未找到指定的key 时 |
找到指定的key 时 |
后方传入lambda 返回值不为null |
执行后方逻辑返回值作为value ,放入map ,注意此处lambda 内部参数的value 为null |
执行后方逻辑返回值作为value ,放入map |
后方传入lambda 返回值为null |
不会更改map |
移除对应的key |
computeIfPresent
:
返回值状态 |
未找到指定的key 时 |
找到指定的key 时 |
后方传入lambda 返回值不为null |
不会更改map |
执行后方逻辑返回值作为value ,放入map |
后方传入lambda 返回值为null |
不会更改map |
移除对应的key |
computeIfAbsent
:
返回值状态 |
未找到指定的key 时 |
找到指定的key 时 |
后方传入lambda 返回值不为null |
则将key 作为参数,执行后方逻辑返回值再作为value ,放入map |
不会更改map |
后方传入lambda 返回值为null |
不会更改map |
不会更改map |