JDK8新特性--Optional类

在实际业务中我们总是需要对一些数据进行判空处理,采用一些if-else进行不同逻辑的处理。

而在jdk8之后推出了Optional来进行判空的处理,简化了代码的书写。

Optional 是一个容器类(本身可以使用流函数),用于表示一个值存在或不存在。它的主要作用是解决 Java 代码中常见的 NullPointerException(空指针异常)问题,从而使代码更加健壮和可读

如何创建

public static <T> Optional<T> of(T var0) {
        return new Optional(var0);
    }

public static <T> Optional<T> ofNullable(T var0) {
        return var0 == null ? empty() : of(var0);
    }
public static <T> Optional<T> empty() {
        Optional var0 = EMPTY;
        return var0;
    }

对于生成Optional类则是通过Optional类的静态方法来实现的,静态方法一共有三种of,ofNullable,empty。

        Optional<String> string1 = Optional.of("测试"); //正常运行
        Optional<String> string2 = Optional.of(null); //运行时候报错

对于of方法传递值的时候不能为空,如果为空则在运行的时候直接抛出空指针异常

        Optional<String> string1 = Optional.ofNullable("测试"); //正常运行
        Optional<String> string2 = Optional.ofNullable(null); //正常运行

对于ofNullable方法则是无论传递是否为null都不会报错

  Optional<String> string1 = Optional.empty(); //正常运行

对于empty函数则是用于创建一个空的 Optional 实例,表示 “没有值” 的状态。它相当于一个容器,明确声明其中不包含任何元素

如何使用

上述介绍了如何创建Optional对象,下面我们来介绍一下Optional常用的几个api方法

        string1.map(e->e.toUpperCase());
        string1.get();
        string1.filter(e->e.equals("测试"));
        string1.ifPresent(System.out::println);
        boolean present = string1.isPresent();
        String s = string1.orElse(null);
     

上述几个常用的api中

map函数:作用和stream流的map函数一样目的是对原来的集合进行类型的转化

get函数:作用是获取当前的Optional内的值,如果 Optional 本身为空(即通过 Optional.empty() 创建或不包含任何值),调用 get() 会立即抛出 NoSuchElementException

filter函数:也是与stream流函数基本一样,目的是过滤掉不符合条件的数据保留符合条件的数据

ifPresent函数:作用是当前Optional内值如果存在则调用内部的方法,用于在 Optional 包含值时执行指定操作,并在值缺失时静默跳过

isPresent函数:判断当前Optional内是否有值有则返回true没有则返回false

orElse函数:它的核心作用是:当 Optional 包含值时返回该值,否则返回指定的默认值。例如上述代码如果Optional内不含有当前值那么则会直接返回括号内部的值也就是null

使用实例:

正常业务判断逻辑

   public String test1(String str){
       if(str!=null){
           return str+" 测试";
       }else{
           return null;
       }
   }

使用Optional的判断逻辑

   public String test1(String str){
     return   Optional.ofNullable(str)
               .map(s -> s + " 测试")
               .orElse(null);
   }

可以看出采用Optional则是简化了代码的书写无需再使用if-else。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值