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

  • 相关阅读:
    git的使用
    每个JavaScript开发人员应该知道的33个概念
    JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
    Java-函数式编程(三)流(Stream)
    Spring高级装配(二) 条件化的bean
    Spring高级装配(一) profile
    Spring Bean装配学习
    Java7任务并行执行神器:Fork&Join框架
    Stream:java1.8新特性
    java基础
  • 原文地址:https://www.cnblogs.com/coisini/p/9799048.html
Copyright © 2011-2022 走看看