##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()