「Java8」OptionalクラスのorElseGetメソッドの使い方

環境
JavaSE 1.8
Eclipse 4.14.0

構文
1.public static <T> Optional<T> of(T value)
指定された非null値を含むOptionalを返します。
パラメータ:
value – 存在する値、非nullである必要がある
戻り値:
存在する値でのOptional

2.public static <T> Optional<T> empty()
空のOptionalインスタンスを返します。このOptionalの値は存在しません。

3.public T orElseGet(Supplier<? extends T> other)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
値が存在する場合はその値を返し、そうでない場合はotherを呼び出し、その呼び出しの結果を返します。
パラメータ: other - Supplier(値が存在しない場合は、これの結果が返される)
戻り値: 値(存在する場合)、それ以外の場合はother.get()の結果
orElseGetにはラムダ式でどのような値を返すかの処理を設定します。
値が存在する場合はその値を返し、そうでない場合はotherを呼び出し、その呼び出しの結果を返します。 パラメータ: other - Supplier(値が存在しない場合は、これの結果が返される) 戻り値: 値(存在する場合)、それ以外の場合はother.get()の結果 orElseGetにはラムダ式でどのような値を返すかの処理を設定します。
値が存在する場合はその値を返し、そうでない場合はotherを呼び出し、その呼び出しの結果を返します。
パラメータ: other - Supplier(値が存在しない場合は、これの結果が返される)
戻り値: 値(存在する場合)、それ以外の場合はother.get()の結果
orElseGetにはラムダ式でどのような値を返すかの処理を設定します。

使用例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package com.arkgame.study;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class OptionalDemo {
private static final String STRMSG = "検索の都市が存在しません";
@SuppressWarnings("serial")
private static Map<String, String> cft = new HashMap<String, String>() {
{
put("101", "東京");
put("202", "大阪");
put("303", "福岡");
}
};
// Optionalの宣言
public static Optional<String> getCityName(String uid) {
if (cft.containsKey(uid)) {
// nullでない値を設定
return Optional.of(cft.get(uid));
} else {
// 値がnullの場合
return Optional.empty();
}
}
public static void main(String[] args) {
// Optionalインスタンス生成
Optional<String> opA = getCityName("202");
// 存在しない場合に返される値 ラムダ式
String nameA = opA.orElseGet(() -> {
return STRMSG;
});
System.out.println("実行結果1: " + nameA);
Optional<String> opB = getCityName("302");
// ラムダ式
String nameB = opB.orElseGet(() -> {
return STRMSG;
});
System.out.println("実行結果2: " + nameB);
}
}
package com.arkgame.study; import java.util.HashMap; import java.util.Map; import java.util.Optional; public class OptionalDemo { private static final String STRMSG = "検索の都市が存在しません"; @SuppressWarnings("serial") private static Map<String, String> cft = new HashMap<String, String>() { { put("101", "東京"); put("202", "大阪"); put("303", "福岡"); } }; // Optionalの宣言 public static Optional<String> getCityName(String uid) { if (cft.containsKey(uid)) { // nullでない値を設定 return Optional.of(cft.get(uid)); } else { // 値がnullの場合 return Optional.empty(); } } public static void main(String[] args) { // Optionalインスタンス生成 Optional<String> opA = getCityName("202"); // 存在しない場合に返される値 ラムダ式 String nameA = opA.orElseGet(() -> { return STRMSG; }); System.out.println("実行結果1: " + nameA); Optional<String> opB = getCityName("302"); // ラムダ式 String nameB = opB.orElseGet(() -> { return STRMSG; }); System.out.println("実行結果2: " + nameB); } }
package com.arkgame.study;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class OptionalDemo {

      private static final String STRMSG = "検索の都市が存在しません";
      @SuppressWarnings("serial")
      private static Map<String, String> cft = new HashMap<String, String>() {
            {
                  put("101", "東京");
                  put("202", "大阪");
                  put("303", "福岡");
            }
      };

      // Optionalの宣言
      public static Optional<String> getCityName(String uid) {
            if (cft.containsKey(uid)) {
                  // nullでない値を設定
                  return Optional.of(cft.get(uid));
            } else {
                  // 値がnullの場合
                  return Optional.empty();
            }
      }

      public static void main(String[] args) {

            // Optionalインスタンス生成
            Optional<String> opA = getCityName("202");
            // 存在しない場合に返される値 ラムダ式
            String nameA = opA.orElseGet(() -> {
                  return STRMSG;
            });

            System.out.println("実行結果1: " + nameA);

            Optional<String> opB = getCityName("302");
            // ラムダ式
            String nameB = opB.orElseGet(() -> {
                  return STRMSG;
            });
            System.out.println("実行結果2: " + nameB);

      }
}

実行結果

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
実行結果1: 大阪
実行結果2: 検索の都市が存在しません
実行結果1: 大阪 実行結果2: 検索の都市が存在しません
実行結果1: 大阪
実行結果2: 検索の都市が存在しません

 

Java

Posted by arkgame