java8 - Optional容器

Optional容器作用:在开发过程中经常存在if(a == null){} 这种判断,若不进行判断就会出现空指针异常的情况,java8的Optional容器出现,是我们不在需要判断是否为空,提高代码简洁,最大化减少空指针的出现。

一、 Optional的方法详解

方法描述
of把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException
empty创建一个空的Optional对象
ofNullable如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException
get把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException
orElse如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
orElseGet如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值
orElseThrow如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常
filter如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象
map如果创建的Optional中的值存在,对该值执行提供的Function函数调用
flagMap如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象
isPresent如果创建的Optional中的值存在,返回true,否则返回false
ifPresent如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做
  1. of()
 //不为空时 正常输出
 Optional<String> optional = Optional.of("小张");
 System.out.println(optional.get());
 //为空时抛出异常
 Optional<String> nullOptional = Optional.of(null);
 System.out.println(nullOptional.get());
  1. empty():获取一个空的Optional对象
    Optional optional1 = Optional.empty();
    System.out.println(optional1);
  1. ofNullable(): 如果有值则返回值 没有值则返回 Optional.empty,创建时不会报错不会抛出空指针,如果在使用.get()就会抛出空指针,
System.out.println(Optional.ofNullable(null));
System.out.println(Optional.ofNullable("list").get());
  1. get() 如果我们创建的Optional对象中有值存在则返回此值,如果没有值存在,则会抛出
    NoSuchElementException异常
Optional<String> optional = Optional.of("小张");
System.out.println(optional.get());
  1. orElse()如果值不为空则返回值,若返回一个默认值
  Optional<String> optional2 = Optional.empty();
  System.out.println(optional2.orElse("1"));
  1. orElseGet() 如果值不为空则返回值,如果值为空 这返回一个自定义一个Supplier接口lam值
  System.out.println(optional2.orElseGet(() -> String.valueOf(Math.random())));
  1. orElseThrow() 如果不为空则返回值,为空则返回一个lam格式的异常
System.out.println(optional2.orElseThrow(CustomException::new));
System.out.println(optional2.orElseThrow(NullPointerException::new));


public class CustomException extends  RuntimeException{

    public CustomException() {
        super("需要自定义异常");
    }

    public CustomException(String message) {
        super(message);
    }
}
  1. filter():如果创建的Optional中的值满足条件则返回值,不满足则返回一个 Optional.empty
 System.out.println(optional.filter((x) -> x.equals("张")));
  1. map() 判断值是否符合lam条件,如果不符合则返回false 如果符合则返回true 传入断言型lam接口:Function
 System.out.println(optional.map((x) -> x.equals("小张")));
  1. flagMap() 判断值是否为空,如果为空则返回 Optional.empty,不为空则执行并返回自定义lam,返回的值会被封装成Optional对象
System.out.println(optional.flatMap(e -> Optional.of(e)));
  1. isPresent() 判断Optional对象的值是否为空 返回true和false
System.out.println(optional.isPresent());
  1. ifPresent() 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做,参数为 Consumer (传入一个参数 无返回值)
optional.ifPresent((x) -> System.out.println("执行一些东西"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值