• 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)这个方法,好啦自己试试吧

  • 相关阅读:
    解决一道leetcode算法题的曲折过程及引发的思考
    算法研究:一维多项式求值(秦九韶算法)
    通过HWND获得CWnd指针
    将标题空格替换为 '_' , 并自动复制到剪切板上
    稀疏矩阵操作算法
    微信好友分析之展示好友信息
    微信好友分析之获取好友信息
    爬取当当网的图书信息之结尾
    爬取当当网的图书信息之封装一个工具类
    爬取当当网的图书信息之实体设计
  • 原文地址:https://www.cnblogs.com/coisini/p/9799048.html
Copyright © 2020-2023  润新知