フィッシャーコーダー:
超簡単な質問:
ここに私の単純なJavaコードは、伝統的な三項演算子を使用します ?
public DateTime getCreatedAt() {
return !recordA.isPresent() ? recordB.get().getCreatedAt() : recordA.get().getCreatedAt();
}
私の最善の策は次のとおりです。
public DateTime getCreatedAt() {
return recordA.map(
record -> record.getCreatedAt())
.orElse(recordB.get().getCreatedAt());
}
これはコンパイルできますが、ルックスは、それが正しく動作していないような。それは、常にときIG、両方の枝を実行recordA
isPresent()、それはまだ実行recordB.get().getCreatedAt()
に私をスロー
java.util.NoSuchElementException: No value present
どれも歓迎です!基本的に、私はより高度なオプション/ラムダ機能を備えた従来の三元オプションを交換したいと思います。THANKS!
元に戻すモニカ - ζ--:
熱心に他の枝、利用評価避けるために、orElseGet
機能的なインターフェースのインスタンスを受け取り、Supplier
:
return recordA.map(
record -> record.getCreatedAt())
.orElseGet(() -> recordB.get().getCreatedAt());