例如,我有两个模型类:
public class Person {}
public class Car {}
现在,我有一个接受2个可选参数的方法:
public void example1(Optional<Person> person, Optional<Car> car) {
if (person.isPresent() && car.isPresent()) {
processing(person.get(), car.get());
}
}
现在,我不想像这样使用空检查,我使用flatMap
和map
。
person.flatMap(p -> car.map(c -> processing(p, c)));
person.map(p -> car.map(c -> processing(p, c)));
所以我的问题是:上述两种用法有什么不同吗?因为我认为这是相同的:如果一个值为null,则java将停止执行并返回。
由于
答案 0 :(得分:5)
唯一的区别是,一个会返回Optional<?>
而另一个会返回Optional<Optional<?>>
(将?
替换为processing()
的返回类型。由于您放弃了退货类型,因此没有区别。
但最好避免使用映射函数,按惯例应该避免副作用,而是使用更惯用的ifPresent()
:
person.ifPresent(p -> car.ifPresent(c -> processing(p, c)));
如果processing()
具有void
返回类型,这也适用于映射函数的情况。