Trầ*_* Dự 4 java optional java-8
例如,我有两个模型类:
public class Person {}
public class Car {}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个接受2个可选参数的方法:
public void example1(Optional<Person> person, Optional<Car> car) {
if (person.isPresent() && car.isPresent()) {
processing(person.get(), car.get());
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我不想像这样使用null检查,我使用flatMap和map.
person.flatMap(p -> car.map(c -> processing(p, c)));
person.map(p -> car.map(c -> processing(p, c)));
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:上述两种用法有什么不同吗?因为我认为是相同的:如果一个值为null,java将停止执行并返回.
谢谢
区别仅在于一个将返回Optional<?>而另一个将返回Optional<Optional<?>>(替换?为返回类型processing()).由于您丢弃了返回类型,因此没有区别.
但最好避免使用映射函数,按惯例应该避免副作用,而是使用更惯用的函数ifPresent():
person.ifPresent(p -> car.ifPresent(c -> processing(p, c)));
Run Code Online (Sandbox Code Playgroud)
如果processing()具有void返回类型,这也有效,而映射函数则不然.
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |