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
本文详细对比了Java中Optional类的orElse与orElseGet方法的使用差异,特别是在Optional对象不为null,而参数为有返回值的函数时的情况。通过具体示例,解释了两种方法在函数执行上的区别。
354

被折叠的 条评论
为什么被折叠?



