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
orElseGet和orElse的用法基本是一直的,就是在输入的元素判断是空时执行orElseGet或orElse
区别就是:
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("输入的值是空"));
————————————————
版权声明:本文为CSDN博主「Owen Guo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46307070/article/details/132523034