zoukankan      html  css  js  c++  java
  • 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)这个方法,好啦自己试试吧

  • 相关阅读:
    《梦断代码》阅读笔记01
    linux c netcdf 安装
    Windows CE中的进程和线程
    VC做任务管理器涉及到的函数
    curl_easy_getinfo() -- 从 curl 句柄里获得附加信息
    libcurl programming
    动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
    C++: byte和int的相互转化
    8位灰度图像BMP的保存
    BMP图像的结构及读写和灰度化
  • 原文地址:https://www.cnblogs.com/coisini/p/9799048.html
Copyright © 2011-2022 走看看