Java8中的Optional的orElse、orElseGet和orElseThrow的使用

orElse

语法:
Optional.ofNullable().orElse();
示例:

public class OptionalDemo {
    public static void main(String[] args) {
        System.out.println(Optional.ofNullable("有值,不是空用自己").orElse("替代值"));
        System.out.println(Optional.ofNullable(null).orElse("替代值"));

        // 经常使用到list上,就不需要写list的判空代码了
        test(null);
        test1(null);
    }

    public static void test(List<Integer> list) {
        // 集合为空返回
        if (list == null || list.isEmpty()) {
            return;
        }
        // 不是空执行操作
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }

    public static void test1(List<Integer> list) {
        Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(System.out::println);
    }
}

我们可以看到使用Optioan的orElse明显少些了许多代码,减少了空指针的发生。

orElseGet

orElseGetorElse的用法基本是一直的,就是在输入的元素判断是空时执行orElseGetorElse
区别就是:
orElse是返回一个替代值,例如输入null,返回一个new ArrayList()
orElseGet是可以传入一个supplier接口的lambda表达式,来实现不同的逻辑

Object value = Optional.ofNullable(null).orElseGet(() -> {
	// 例如之前的值是从Redis缓存中查询的值,没有查询到
	// 则查询数据库
	// 将值保存到redis
	// 返回值
	return "从数据库查询到的值";
});

orElseThrow

理解了上面的,这里就更好理解了,orElseThrow就是输入是null时,就返回一个异常对象,会自动throw这个异常对象。

Optional.ofNullable(null).orElseThrow(()->new RuntimeException("输入的值是空"));

你可能感兴趣的:(#,Java8新特性,java8,optional,orElse,新特性)