我们在开发过程中,经常会遇到值为Map的Map。这种情况下我们需要先把key的值取出来,然后判断是否为null。如果值为null,则初始化值并把它存放进Map。
示例代码:
String childKey="2020-01";
User user = new User();
Map<String,Map<String,User>> parentMap = new HashMap();
Map<String, User> childMap = parentMap.get(id);
if(childMap!=null){
childMap.put(childKey, user); //<---重复代码
}else{
childMap = new HashMap<>();
childMap.put(childKey, user); //<---重复代码
parentMap.put(id, childMap);
}
使用Map.computeIfAbsent()简化:
parentMap.computeIfAbsent(id, key -> new HashMap<>()).put(childKey, user);
Map.computeIfAbsent()会计算id是否存在,如果不存在,会调用key->new HashMap<>(),构建key对应的HashMap,并返回新的值。如果id存在则直接返回id对应的HashMap。接着就可以往HashMap里存放数据。
Map相关用于计算key的值默认方法
key存在计算key的值,key不存在,remappingFunction接收到的是null的值,可以在remappingFunction对null处理
default V compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)
key存在直接返回key对应的值,如果key不存在,使用mappingFunction做计算处理
default V computeIfAbsent(K key,
Function<? super K, ? extends V> mappingFunction)
key存在,使用remappingFunction计算处理,key不存在直接返回null的值。
default V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)