いまいちOptionalの使いドコロがわかっていなかったのですが、こういうことだったのかなぁと理解しました。

変数hogenullでないときのみ、hogeのメソッドを実行したい

従来のやりかた


if (hoge != null) {
    hoge.fuga();
}

Optionalを使ったやりかた


Optional
    .ofNullable(hoge)
    .ifPresent(o -> o.fuga());

どっちのほうが見やすいかな? :smile:

変数hogenullでないときは、hogeのメソッド実行結果を返す

従来のやりかた


fugo = hoge != null ? hoge.fugo() : null;

Optionalを使ったやりかた


fugo = Optional
    .ofNullable(hoge)
    .map(o -> o.fugo())  // Optional<?>が返ってくるので、
    .orElse(null);       // orElseで値そのものか、デフォルト値(ここではnull)を返すようにする

これくらいだと、3項演算子のほうが見やすいかな? :smile:

変数hogenullでないときは、hogeのメソッドを呼び、メソッドの結果がnullでないときは、さらにメソッドを呼ぶ

何書いてあるかわかんないですね。コード見てください。

従来のやりかた


instant = null;

if (hoge != null) {
    date = hoge.getDate();

    if (date != null) {
        instant = date.toInstant();
    }
}

あるいは、こんなんどうでしょう?


instant = hoge != null
    ? (hoge.getDate() != null
        ? hoge.getDate().toInstant()
        : null) 
    : null;

Optionalを使ったやりかた

instant = Optional
  .ofNullable(hoge)
  .map(o -> o.getDate())     
  .map(d -> d.toInstant())   
  .orElse(null);

どっちのほうが見やすいかな? :smile: