31
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OptionalのorElse()とorElseGet()の使い分けが気になったので

Last updated at Posted at 2018-10-10

##Optional is 何

Java8で追加されたクラス - java.util.Optional

null以外の値が含まれている場合も含まれていない場合もあるコンテナ・オブジェクトです。
by https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html

なるほど、わからん。

##似てる

  • orElse(T other)
    存在する場合は値を返し、それ以外の場合はotherを返します。

  • orElseGet(Supplier extends T> other)
    値が存在する場合はその値を返し、そうでない場合はotherを呼び出し、その呼び出しの結果を返します。

##とりあえずお試しコード

Main.java
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        // 1.
        Optional.of("hoge").orElseGet(() -> {
            System.out.println("実行されないorElseGetだよ");
            return "";
        });

        // 2.
        Optional.empty().orElseGet(() -> {
            System.out.println("実行されるorElseGetだよ");
            return "";
        });

        // 3.
        String piyo = (String)Optional.of("hoge").orElse("返却されないorElseだよ");
        System.out.println("piyo: " + piyo);

        // 4.
        String piyo2 = (String)Optional.empty().orElse("返却されるorElseだよ");
        System.out.println("piyo2: " + piyo2);

    }
}

##結果

                              // 1.
実行されるorElseGetだよ         // 2.
piyo: hoge                     // 3.
piyo2: 返却されるorElseだよ     // 4.

##つまり・・・?
 orElse()はOptionalの中身がnullであるかにかかわらず実行されて、oeElseGet()はnullの場合だけ実行される。

##結論

  • 「nullの場合は空文字やゼロを返す」のように定数を返すだけのためにラムダ式を書くのは無駄なのでorElse()が良い
  • 「nullの場合は何かしらの処理を行い、その結果を返却する」の場合はorElseGet()
31
18
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
31
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?