一、对单体对象非空判断 ifPresent() 示例如下:
DtoClass dtoClass = new DtoClass("狗子", null, null);
Optional.ofNullable(dtoClass).ifPresent(dto ->{
System.out.println("不为空才执行:"+dto.getName());
});
测试结果:
如果 dtoClass 参数为空,则不会输出
二、orElse() 和 orElseGet()
示例1 Optional.ofNullable() 的参数不为空:
public static DtoClass createDto(String source){
System.out.println("我被"+source+"调用了");
return new DtoClass();
}
public static void main(String[] args) {
DtoClass dtoClass = new DtoClass("狗子", null, null);
String orElseRes = Optional.ofNullable(dtoClass).orElse(createDto("orElse")).getName();
System.out.println("orElseRes = " + orElseRes);
String orElseGetRes = Optional.ofNullable(dtoClass).orElseGet(() -> createDto("orElseGet")).getName();
System.out.println("orElseGetRes = " + orElseGetRes);
}
输出:
示例2 Optional.ofNullable() 的参数为空:
public static DtoClass createDto(String source){
System.out.println("我被"+source+"调用了");
return new DtoClass();
}
public static void main(String[] args) {
DtoClass dtoClass = new DtoClass("狗子", null, null);
dtoClass = null;
String orElseRes = Optional.ofNullable(dtoClass).orElse(createDto("orElse")).getName();
System.out.println("orElseRes = " + orElseRes);
String orElseGetRes = Optional.ofNullable(dtoClass).orElseGet(() -> createDto("orElseGet")).getName();
System.out.println("orElseGetRes = " + orElseGetRes);
}
输出
小结:
1、从结果来看,orElse() 和 orElseGet() 的作用是一样的,都是当前置参数为空的情况下会调用此两者方法
2、区别在于无论前置参数是否为空都会执行 orElse(),只有前置参数为空才会执行行 orElseGet()
3、此二者传参写法略有不同,orElseGet() 需要传入匿名函数生产实例对象,推荐使用 orElseGet()
三、orElseThrow() 前置参数为空排出异常
DtoClass dtoClass = new DtoClass("狗子", null, null);
String name1 = Optional.ofNullable(dtoClass).orElseThrow(() -> new BizException("不能为空")).getName();
System.out.println("条件不为空 = " + name1);
dtoClass = null;
String name2 = Optional.ofNullable(dtoClass).orElseThrow(() -> new BizException("不能为空")).getName();
System.out.println("条件为空 = " + name2);
输出: