2017-03-27 8 views
4

ヌルチェックスタイルにマップとflatMapの違い私は2つのモデルクラス:のJava 8:例えば

public void example1(Optional<Person> person, Optional<Car> car) { 
    if (person.isPresent() && car.isPresent()) { 
     processing(person.get(), car.get()); 
    } 
} 

:今

public class Person {} 
public class Car {} 

、I 2のオプションパラメータを受け付け方法を有します今、私はこのようなヌルチェックを使用したくない、私はflatMapmapを使用します。

person.flatMap(p -> car.map(c -> processing(p, c))); 
    person.map(p -> car.map(c -> processing(p, c))); 

私の質問は:上記の2つの用途に違いはありますか?私は同じだと思うので、1つの値がnullの場合、javaは実行を停止して戻ります。

おかげ

答えて

5

違い1はOptional<?>を返し、その他は(processing()の戻り値の型と?を置き換える)Optional<Optional<?>>を返すことだけです。あなたが戻り値の型を破棄しているので、違いはありません。

しかし、それは慣例により副作用を避け、代わりに使用すべき、マッピング機能を回避するために最善だより慣用ifPresent()

person.ifPresent(p -> car.ifPresent(c -> processing(p, c))); 

このprocessing()はにISN void戻り値の型を持っている場合にも動作しますマッピング関数を使った場合です。