• Optional的常见用法


    package com.jwx.digital.client;
    
    import com.jwx.digital.client.pojo.dto.ChildDTO;
    import org.junit.Test;
    
    import java.util.Optional;
    
    /**
     * OptionalTest
     *
     * @author lvjijun
     * @version 1.0
     * @Date 2020-11-06
     */
    public class OptionalTest {
    
        public static void main(String[] args) {
            ChildDTO childDTO = new ChildDTO("123");
            childDTO.setChilAddress("高新园");
            System.out.println(getChilAddress(childDTO));
            System.out.println(getChilAddressNew(childDTO));
        }
    
        /**
         * Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,
         * 使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPointerException)。
         */
    
        /**
         * 这是一个获取儿童住址的方法,方法入参为一个ChildDTO对象,childDTO, 做了防御性检查:如果值为null,返回"Unkown"。
         */
        public static String getChilAddress(ChildDTO childDTO){
            if(childDTO==null){
                return "unknown";
            }else {
                return childDTO.getChilAddress();
            }
        }
    
    
        /**
         * 再看使用Optional优化后的方法
         */
        public static String getChilAddressNew(ChildDTO childDTO){
            return Optional.ofNullable(childDTO).map(c -> c.getChilAddress()).orElse("unknown");
        }
    
        /**
         * 二.Optional对象的创建
         *
         * Optional类的两个构造方法都是private型的,因此类外部不能显示的使用new Optional()的方式来创建Optional对象,
         * 但是Optional类提供了三个静态方法empty()、of(T value)、ofNullable(T value)来创建Optinal对象,示例如下:
         */
        @Test
        public void createOptional(){
            // 1、创建一个包装对象值为空的Optional对象
            Optional<String> optional = Optional.empty();
    
            // 2、创建包装对象值非空的Optional对象
            Optional<String> optionalStr = Optional.of("optional");
    
            // 3、创建包装对象值允许为空的Optional对象
            Optional<String> optionalStr2 = Optional.ofNullable(null);
    
        }
    
        /**
         * 三.Optional 类典型方法使用
         */
        @Test
        public void OptionalUsage(){
          //  get()   获取包装的对象
            ChildDTO childDTO = new ChildDTO("123");
            childDTO.setChilAddress("高新园");
            ChildDTO childDTO1 = Optional.ofNullable(childDTO).get();
            System.out.println(childDTO1);
    
            //isPresent()
            //返回true
            boolean present = Optional.of(childDTO).isPresent();
            System.out.println(present);
    
            //NullPointerException
            //boolean present2 = Optional.of(null).isPresent();
            //System.out.println(present2);
    
            //返回false
            boolean present3 = Optional.ofNullable(null).isPresent();
            System.out.println(present3);
    
    
            //ifPresent()  fPresent()方法内部做了null值检查,调用前无需担心childDTO2.getChilBirthday() NPE问题。
            Optional.of(childDTO).ifPresent(childDTO2 -> System.out.println(childDTO2.getChilBirthday()));
    
            //filter()方法  筛选
            ChildDTO childDTO2 = new ChildDTO("66666");
            ChildDTO childDTO3 = new ChildDTO("33333");
            //不输出
            Optional.ofNullable(childDTO2).filter(c -> c.getChilNo().equals("33333")).ifPresent(c -> System.out.println("儿童"+c+"编码是"+"33333") );
            //输出
            Optional.ofNullable(childDTO3).filter(c -> c.getChilNo().equals("33333")).ifPresent(c -> System.out.println("儿童"+c+"编码是"+"33333") );
    
            
        }
    
    }
    

      

  • 相关阅读:
    Python记录_day21 模块
    python记录day_20 多继承
    python记录_day019 类的约束 异常处理 日志
    python记录_day018 md5加密
    python记录_day18 反射 判断函数与方法
    python记录_day17 类与类之间的关系
    python记录_day16 类的成员
    实验0 了解和熟悉操作系统
    IT就业·软件工程之我见
    递归下降分析程序
  • 原文地址:https://www.cnblogs.com/lvjijun/p/13936978.html
Copyright © 2020-2023  润新知