エレガント三項演算子を置き換えるためのJavaオプションを使用する方法

フィッシャーコーダー:

超簡単な質問:

ここに私の単純な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、両方の枝を実行recordAisPresent()、それはまだ実行recordB.get().getCreatedAt()に私をスロー

java.util.NoSuchElementException: No value present

どれも歓迎です!基本的に、私はより高度なオプション/ラムダ機能を備えた従来の三元オプションを交換したいと思います。THANKS!

元に戻すモニカ - ζ--:

熱心に他の枝、利用評価避けるために、orElseGet機能的なインターフェースのインスタンスを受け取り、Supplier

return recordA.map(
    record -> record.getCreatedAt())
    .orElseGet(() -> recordB.get().getCreatedAt());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=176984&siteId=1