簡體   English   中英

Java 8:用於null檢查樣式的map和flatMap之間的區別

[英]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檢查,我使用flatMapmap

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM