Java使用Map.computeIfAbsent()方法简化初始不存在的key

我们在开发过程中,经常会遇到值为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)

版权声明:著作权归作者所有。

相关推荐

MySQL使用NOT IN存在null值导致结果错误的解决方法

house表:create table house (address varchar(200) not null, heating varchar(50));表中有两个字段,address地址,不能为null,凉爽程度heating 可以为null。插入记录:insert into house values ('A', null),('B','hot');in查询语句:select address

Java 8使用Collections toMap实现List转换为Map

Collections提供了toMap()来实现集合转换为Map。方法如下:Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) keyMapper:实现键的

Java8使用Lambda把List转换为Map

使用Java8的Collections可以很简便地把List转换为Map以User为例List里的User名字唯一Map<String, User> result =     users.stream().collect(Collectors.toMap(User::getName,   &nbs

Python判断文件是否存在的方法

方法一使用os.path.exists判断路径是否存在,包括文件夹和文件。import os.path os.path.exists(my_file) 方法二使用os.path.isfile检查路径是否为文件,如果文件存在返回True。import os.path os.path.isfile(my_file)  方法三面向对象文件系统路径操作包pathlib2,pa