putIfAbsent,一个字段为空的话,将该字段设置为指定值
我觉得开发中应该经常有这种需求,比如从数据库读出来条记录,如果这个记录的nickName字段为null,那我们就为其指定默认昵称。
啥也不说,看代码代码,两种方法
方法一:原始思路
方法二:借助java8固有的putIfAbsent(k,v)
1)方法一,按照思路来嘛,先读,再判断,nickName到底有没有值,如果为null,为其指定
@Test
public void putIfAbsentTest(){
Map map = new HashMap<>();
//这里没有做数据库连接,直接把name的value设为null,你就当做从数据库读出来一个Map的结果集,
// 其中nickName字段的值为null,效果一样的
map.put("nickName",null);
System.out.println(map.get("nickName"));
if(map.get("nickName") == null){
map.put("nickName","snail");
}
System.out.println(map.get("nickName"));
}
2)方法二,java8的map提供一个方法putIfAbsent(),absent是空缺,缺席的意思,先看源码
default V putIfAbsent(K key, V value) {
V v = get(key);
//这里需要清除,v为nulll存在两种情况1:k存在,但是v为null
//2:k根本不存在,所以对应的v一定是null
//所以这个方法执行的效果是,k存在但是v为null,将v赋值为指定的v
//或者,k-v根本不存在,那就直接put(k,v)
if (v == null) {
v = put(key, value);
}
return v;//v不为null,直接返回原来的v
}
源码分析过了,那我们这个问题就好解决了
@Test
public void putIfAbsentTest(){
Map map = new HashMap<>();
//这里没有做数据库连接,直接把name的value设为null,你就当做从数据库读出来一个Map的结果集,
// 其中nickName字段的值为null,效果一样的
map.put("nickName",null);
System.out.println("最开始,没有昵称:"+map.get("nickName"));
map.putIfAbsent("nickName","coisini");
System.out.println("设置昵称为coisini: "+map.get("nickName"));
map.putIfAbsent("nickName","snail");
System.out.println("设置昵称为snail不成功,因为昵称不为null"+ map.get("nickName"));
map.putIfAbsent("phone","12345678");
System.out.println("之前不存在k为phone的元素,执行putIfAbsent会自动创建"+map.get("phone"));
}
啰嗦了半天,其实就是讲解putIfAbsent(k,v)这个方法,好啦自己试试吧