JDK8中新增的Optional工具类真的很好用哦,建议收藏

2022-09-10 08:36:56

  最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Optional

Optional

这个Optional类注意是解决空指针的问题

1. 以前对null 的处理

@Testpublicvoidtest01(){//String userName = "张三";String userName=null;if(userName!=null){System.out.println("字符串的长度:"+ userName.length());}else{System.out.println("字符串为空");}}

2. Optional类

Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException,
在这里插入图片描述

3. Optional的基本使用

Optional对象的创建方式

/**
     * Optional对象的创建方式
     */@Testpublicvoidtest02(){// 第一种方式 通过of方法  of方法是不支持null的Optional<String> op1=Optional.of("zhangsan");//Optional<Object> op2 = Optional.of(null);// 第二种方式通过 ofNullable方法 支持nullOptional<String> op3=Optional.ofNullable("lisi");Optional<Object> op4=Optional.ofNullable(null);// 第三种方式 通过empty方法直接创建一个空的Optional对象Optional<Object> op5=Optional.empty();}

4. Optional的常用方法

/**
     * Optional中的常用方法介绍
     *   get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常
     *          get()通常和isPresent方法一块使用
     *   isPresent():判断是否包含值,包含值返回true,不包含值返回false
     *   orElse(T t):如果调用对象包含值,就返回该值,否则返回t
     *   orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值
     */@Testpublicvoidtest03(){Optional<String> op1=Optional.of("zhangsan");Optional<String> op2=Optional.empty();// 获取Optional中的值if(op1.isPresent()){String s1= op1.get();System.out.println("用户名称:"+s1);}if(op2.isPresent()){System.out.println(op2.get());}else{System.out.println("op2是一个空Optional对象");}String s3= op1.orElse("李四");System.out.println(s3);String s4= op2.orElse("王五");System.out.println(s4);String s5= op2.orElseGet(()->{return"Hello";});System.out.println(s5);}
@Testpublicvoidtest04(){Optional<String> op1=Optional.of("zhangsan");Optional<String> op2=Optional.empty();// 如果存在值 就做什么
        op1.ifPresent(s->System.out.println("有值:"+s));
        op1.ifPresent(System.out::println);}/**
     * 自定义一个方法,将Person对象中的 name 转换为大写 并返回
     */@Testpublicvoidtest05(){Person p=newPerson("zhangsan",18);Optional<Person> op=Optional.of(p);String name=getNameForOptional(op);System.out.println("name="+name);}/**
     * 根据Person对象 将name转换为大写并返回
     *    通过Optional方式实现
     * @param op
     * @return
     */publicStringgetNameForOptional(Optional<Person> op){if(op.isPresent()){String msg=//op.map(p -> p.getName())
                   op.map(Person::getName)//.map(p -> p.toUpperCase()).map(String::toUpperCase).orElse("空值");return msg;}returnnull;}/**
     * 根据Person对象 将name转换为大写并返回
     * @param person
     * @return
     */publicStringgetName(Person person){if(person!=null){String name= person.getName();if(name!=null){return name.toUpperCase();}else{returnnull;}}else{returnnull;}}

~好了,Optional真的很简单,其实大家只要了解了它在工作中还是蛮有用的哦,欢迎点赞关注加收藏哦

  • 作者:波波烤鸭
  • 原文链接:https://blog.csdn.net/qq_38526573/article/details/117630449
    更新时间:2022-09-10 08:36:56