1. orElse方法与orElseGet方法对比表
Optional内对象 | 参数 | 效果 | 注释 |
null | 对象 | 相同 | orElse和orElseGet方法都会返回参数对象 |
不为null | 对象 | 相同 | 返回Optional内对象 |
null | 有返回值的函数 | 相同 | orElse和orElseGet方法都会返回参数内函数返回值 |
不为null | 有返回值的函数 | 不同 | 返回Optional内对象,但orElseGet不会执行函数内容,orElse会执行函数内容 |
2. 简单示例(仅针对orElse与orElseGet方法不同的情况,即Optional内对象不为null,且参数为有返回值函数)
2.1 准备类
public class Staff {
String name;
Integer age;
... // getter setter
}
2.2 orElse 和 orElseGet的对比
@Test
void optionalTest(){
Staff staff = new Staff("Jerome",12);
System.out.println("----------------------orElseGet---------------------------");
staffName = Optional.ofNullable(staff).map(s -> s.getName()).orElseGet(this::getName);
System.out.println(staffName);
System.out.println("----------------------orElse---------------------------");
staffName = Optional.ofNullable(staff).map(s -> s.getName()).orElse( getName());
System.out.println(staffName);
}
private String getName(){
System.out.println("Get String if null");
return "Get String";
}
显示效果
----------------------orElseGet---------------------------
Jerome
----------------------orElse---------------------------
Get String if null
Jerome