Map中的merge,compute相关和getOrDefault,putIfAbsent操作
作者:Vic ,分类:Java 发布于 2020-02-15 20:34:21
Map内相关的Java8函数用法
1. merge( K key, V value , BiFunction remappingFunction);
Map<String,String > map = new HashMap<>();
map.put("abc","22");
map.merge("abc","33", String::concat);
// 如果abc存在 , 则拼接为 2233
// 如果abc不存在则设置为 33
// 如果第二行改为 map.put("acb",null); 则设置为 33
2. compute( K key, BiFunction remappingFunction);
Map<String,String > map = new HashMap<>();
map.put("abc","22");
map.compute("abc", (key, oldValue) -> oldValue == null ? "ccc" : "hhh"); // 简单逻辑判断
// 或者可以这样写
map.compute("abc", (key, oldValue) -> check(oldValue));
public static String check(String oldValue){
return "ok";
}
3. computeIfAbsent( K key, Function mappingFunction);
Map<String,String > map = new HashMap<>();
map.put("abc","22");
map.computeIfAbsent("abc", key -> check(key));
// 如果abc不存在则调用check();
// 如果abc存在则不调用check();
// 如果第二行改为 map.put("abc",null); 则调用check();
public static String check(String key){
return "ok";
}
4. computeIfPresent( K key, BiFunction remappingFunction);
Map<String,String > map = new HashMap<>();
map.put("abc","22");
map.computeIfPresent("5", (key, oldValue) -> check(key,oldValue));
// 如果abc存在则不调用check();
// 如果abc不存在则调用check();
// 如果第二行改为 map.put("abc",null); 则调用check();
public static String check(String key,String oldValue){
return "ok";
}
5. getOrDefault( Object key, V defaultValue)
Map<String,String > map = new HashMap<>();
map.put("abc","2");
String value = map.getOrDefault( "abc", "1");
// 如果abc存在value的值 2
// 如果abc不存在则返回给定的defaultValue 1
// 如果第二行改为 map.put("abc",null); 则返回null
6. putIfAbsent( K key, V value)
Map<String,String > map = new HashMap<>();
map.put("abc","2");
map.putIfAbsent( "abc", "1");
// 如果map里不存在则添加abc值为1
// 如果map里abc存在则不添加
// 如果第二行改为 map.put("abc",null); 则添加abc值为1