Optional类的学习

这个类是java8添加的新类,可以当做一个容器,主要来处理对象为null的情况。

可以看到这个类的源码,里面就包含了一个value值。


创建Optional对象

1.使用of()方法,返回一个Optional实例。使用这种方式传入的value值不能为空。

static <T> Optional<T> of(T value)

2.使用ofNullAble()方法,可以传入一个可能为空的value。

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

常用方法的使用

1.判断value是否为空

    isPresent返回一个boolean值。判断optional里的value是否为空。

    还有一个重载方法 ,没有返回值。可以直接在里面添加逻辑。

Optional.of(user).ifPresent((u1) -> {
            System.out.println("执行逻辑");
        });
2. 如果value为空,则设置一个代替值

   1> 使用orElse方法,和orElseGet方法可以达到以上效果。需要注意的是,这两个方法的返回值是optional的value值。

// 当optional的value是空的时候会用orelse里的值代替。
 Optional.ofNullable(user).orElse(null);

// 当optional的value是空的时候会用orElseGet里获得的值代替。
Optional.ofNullable(user).orElseGet(()->{
    User u = new User();
    u.setName("备用的user");
    return u;
  });

  2>使用 orElseThrow方法, 如果为空,则抛出一个自定义的异常。稍微看下源码:

    public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
        if (value != null) {
            return value;
        } else {
            throw exceptionSupplier.get();
        }
    }

    我们可以这样使用:

Optional.of(user).orElseThrow(()->new RuntimeException("自定义的异常"));
3. map方法

    这里的map方法和我们用到的map集合貌似没有半毛钱关系。

    如下map方法的使用,map的参数是一个方法函数,方法函数会返回一个值,作为Optional的新的value。map的返回值是一个optional实例。

    /**
     * <U> Optional<U> map(Function<? super T, ? extends U> mapper)
     * 注意map的传入的方法函数(这个函数里面是接受了一个T类型<原来opt的value类型>,返回了一个U类型,然后U类型赋给了value)。
     */
    public void fun2(User user) {
        // map()方法表示,返回一个value是name的optional,value可能为空。
        String str = Optional.of(user).map((u1) -> u1.getName()).orElse("name是空的。。");
        System.out.println(str);

    }
4. filter方法

    理解了map方法在理解filter方法就比较容易了。filter的参数也是一个方法函数,返回值为boolean类型。filter方法的返回值同样是一个optional实例。而filer的功能就是筛选掉

    如下代码,

    public void fun3(User user) {
        // user 是一个name=“sen”的实例。经过过滤之后,返回一个value = null的 optional的实例。
        Optional o = Optional.of(user).filter((u1) -> {
            if (u1.getName().equalsIgnoreCase("sen")){
                return false;
            }
            return true;
        });
        System.out.println(o);
    }

 
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值