Optional详解

Optional是什么
Optional是java8 util包里类
用来避免使用if(aa == null) {} 这样结构的代码的
guava里也有 我们的原则java内置的包优先第三方的依赖

这个类里有几个方法 都是干什么的
这里只说需要掌握的 剩下的几个不会对优化代码有好处

  1. ifPresent
这个Optional里这个对象不是null就会执行ifPresent( 里的内容 )  不会有任何异常
很好用 不用写 !=null 

 String a = "test";
 Optional.ofNullable(a).ifPresent(t->System.out.println("a不是null,我才会执行"));

Optional.of(传入null就抛异常)
Optional.ofNullable(传啥都不会报异常)
Optional.empty() = new Optional

  1. filter 就是相当于一个if的过滤条件
Person p = new Person();
p.setName("小红");Optional.ofNullable(p)
.filter(t->"小明明明".equals(t.getName()))
.ifPresent(t2->System.out.println("filter 里是true的话我才能执行到"));
  1. orElse orElseGet 两个作用一样 都是在为null的时候可以给一个默认值
    区别是后者是个() -> {} 前者是个对象
  Person p = null;
  String x = "test";
  Person p1 = Optional.ofNullable(p).orElse(new Person());
  Person p2 = Optional.ofNullable(p).orElseGet(()->{
      System.out.println(x);
      return new Person();
  });
  1. orElseThrow 如果为null就抛出异常
    try{
        Optional.ofNullable(null).orElseThrow(()->new RuntimeException("我是异常,需要捕获"));
    }catch (Exception e) {
        e.printStackTrace();
    }
  1. map flatMap 两个都是可以访问对象里的内容 t->{ } t是对象
    不同点是 返回结果不一样 前者返回的是一个新的对象 后者返回的是一个新的Optional对象
      User user = new User();
      Address address = new Address();
      House house = new House();
      house.setName("房子的名字");
      address.setHouse(house);
      user.setAddress(address);
      Optional<User> userOptional = Optional.ofNullable(user);
  
  String name = userOptional
              .map(u->u.getAddress())
              .map(address1 -> address1.getHouse())
              .map(house1 -> house1.getName())
              .orElse("defff");
      System.out.println(name); 
    
  String name1 = userOptional
              .flatMap(u->Optional.ofNullable(u.getAddress()))
              .flatMap(address1 -> Optional.ofNullable(address1.getHouse()))
              .flatMap(house1 -> Optional.ofNullable(house1.getName())).orElse("default");
      System.out.println(name1);

map 和 flatmap 还有很多更好的用法 欢迎各位留言区分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰明子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值