双ビット:
私のIDE(InteliJ)は、私のコードは、「機能的なスタイルで、単一の式で置き換えることができます」と私を指して強調し続けてisPresent()
:
return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;
timestamp
オプションのように初期化されます。
Optional<Date> timestamp = ...
私の仮定は、私が使用する必要があるということですifPresent
。このようなtimestamp.ifPresent(Obj2::new)
。しかし、ifPresent
無効であると私は、作成したオブジェクトを返す機会がありません。また、その後返すカントnull
。私のコードへの解決策はありますか?
Ousmane D .:
あなたは言うで正しいだifPresent
リターンは無効とこのケースで、したがって適していません。あなたのIDEを使用すると、簡単に行うことができますことを示唆しています:
timestamp.map(Obj2::new).orElse(null);
これは、「任意の場合のように読み込みtimestamp
、現在の状態は、それがに含まれているオブジェクト渡していObj2
コンストラクタを、この新しい返すObj2
そうでない場合は、インスタンスを(orElse
)の戻りnull
。
別のノートで、IntelliJ IDEAがあなたはそれが示唆されていますコードを生成することができます。
例えば、スクリーンショットの下に与えられました:
私は単純に「強調表示」の部分をクリックし、「ALT +は、ENTER」を押すと、IntelliJのは、それが機能的なスタイルと条件を置き換える必要があるかどうかを示唆しています。