Java8 Optional理解

Optional的出现我认为是优雅的处理NPE问题的一个好方法。

在之前我处理NPE(Null Pointer Exceptio)问题的都这样的 这样写

    User user = new User()
    if(user!=null){
        return user.getOrders();
    }else{
        return Collections.emptyList();
    }

可以说是非常丑陋了,但是如果用Optional可以这样写

   Optional<User> user = Optional.of(new User());
    // map是遍历user类中的方法不为空则执行
   user.map(u -> u.getOrders()).orElseGet(() -> Collections.emptyList());

一般的处理流程:

        1. 创建Optional类型的数据

 @Data
 public class User {
     private String name;
     private Integer age;
     private Optional<Address> address = Optional.empty();
 }
 @Data
 public class Address {
     private Optional<Street> street = Optional.empty();
 }
 @Data
 public class Street {
     private String streetName;
     private Integer streetNo;
 }

      2. 判空判断的语句

        Optional<User> userOptional = Optional.ofNullable(new User());
        Integer streetNo = userOptional.orElse(new User()).getAddress().orElse(new    Address()).getStreet().orElse(new Street()).getStreetNo();
        // 等价于
        User user = new User();
        if (user != null) {
            user.getAddress();
             if ( user.getAddress()  != null) {
                 Address address = new Address();
                 if (address.getStreet() != null) {
                        Street street = new Street();
                     Integer streetNo1 = street.getStreetNo();
                 }
             }
        }

  这个写法也很好

        Optional.ofNullable(new User())
                .map(User::getAddress)
                .map(Address::getStreet)
                .map(Street::getStreetName)
                .orElse("Java");

总而言之,“透过现象看本质”, Optional就是一个封装类,里面有map, orElse 等函数去帮我们做了一些判空的的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值