[英]Java 8: Difference between map and flatMap for null-checking style
例如,我有兩個模型類:
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());
}
}
現在,我不想像這樣使用null檢查,我使用flatMap
和map
。
person.flatMap(p -> car.map(c -> processing(p, c)));
person.map(p -> car.map(c -> processing(p, c)));
所以我的問題是:上述兩種用法有什么不同嗎? 因為我認為是相同的:如果一個值為null,java將停止執行並返回。
謝謝
區別僅在於一個將返回Optional<?>
而另一個將返回Optional<Optional<?>>
(用返回類型的processing()
替換?
)。 由於您丟棄了返回類型,因此沒有區別。
但最好避免映射函數,按照慣例應該避免副作用,而是使用更慣用的ifPresent()
:
person.ifPresent(p -> car.ifPresent(c -> processing(p, c)));
如果processing()
具有void
返回類型,這也適用,而映射函數則不然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.