LoginSignup
4
3

More than 5 years have passed since last update.

[Java] if(hoge != null) {...}の代わりにOptionalを使う

Posted at

いまいち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:

4
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3