Optional 的用法

本文详细介绍了在Java中如何创建Optional对象,包括空的Optional、使用of和ofNullable的区别,以及isPresent、isEmpty、orElse和orElseGet方法的用法和原理。
摘要由CSDN通过智能技术生成

常见的有三种方法创建Optional

创建一个为空的optional实例

    @Test
    public void test_create_empty_optional() {
        Optional<String> empty = Optional.empty();
        Assert.assertFalse(empty.isPresent());
    }

用of 创建的Option实例必须为非空,用ofNullable创建的Option实例可以为空。get获取Optional的值,如果为空的话,会报NoSuchElementException

    @Test
    public void test_create_optional() {
        Optional<String> opt = Optional.of("not empty");
        Assert.assertTrue(opt.isPresent());
        String res = opt.get();
        System.out.println(res);
    }

    @Test
    public void test_create_optional2() {
        Optional<String> opt = Optional.ofNullable(null);
        Assert.assertFalse(opt.isPresent());
        System.out.println(opt.get());
    }

检查值是否为空

isPresent 和 isEmpty 来查看值是否为空

    @Test
    public void test_present() {
        Optional<String> opt = Optional.of("present");
        opt.ifPresent(a -> System.out.println(a.length()));
    }

orElse 和 orElseGet 

orElse 和 orElseGet 源码,orElse入参是一个泛型T,orElseGet入参是一个Supplier。

    public T orElse(T other) {
        return value != null ? value : other;
    }

    public T orElseGet(Supplier<? extends T> other) {
        return value != null ? value : other.get();
    }

如果值为空的话,用赋予默认值 

    @Test
    public void test_else() {
        String nullName = null;
        String name = Optional.ofNullable(nullName).orElse("john");
        System.out.println(name);
    }


    @Test
    public void test_elseGet() {
        Supplier<String> string_supplier = new Supplier<String>() {
            @Override
            public String get() {
                return "john";
            }
        };
        String nullName = null;
        String name = Optional.ofNullable(nullName).orElseGet(string_supplier);
        System.out.println(name);
    }

如果ofNullable不为空,orElse 会有value输出, orElseGet则不会有值。这是因为orElseGet是懒计算,notNullName有值,method不会被调用,而orElse则不是。

    public String method() {
        System.out.println("value");
        return "value";
    }

    @Test
    public void test_else() {
        String notNullName = "value present";
        String name = Optional.ofNullable(notNullName).orElse(method());
    }

    @Test
    public void test_elseGet() {
        String notNullName = "value present";
        String name = Optional.ofNullable(notNullName).orElseGet(this::method);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值