0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】Optionalの活用

0
Posted at

はじめに

久々に業務でJavaに触れたので、ついでにOptionalを復習した結果を記事としてまとめてみました。

サンプルコード1

ofNullable():「値がnullかもしれない時」に安全なOptionalオブジェクトを作る。
ifPresent():値が存在する場合のみ実行する。
map():(レシーバの)値が存在する場合にメソッド(※ここではString::toLowerCase())適用した結果を返す。

  • 以下のtoLowerCaseNullable()では、「引数txtがnullでない(値が存在する)時だけString::toLowerCase()を呼び出す」というコードになっています。
  • 呼び出し元ではifPresent()を使って「戻り値が存在する時のみ標準出力する」というコードになっています。
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        var opt1 = toLowerCaseNullable("aBcde");
        var opt2 = toLowerCaseNullable(null);
        
        // 値が存在する場合のみ実行
        opt1.ifPresent(txt1 -> System.out.println(txt1));  // -> abcde
        opt2.ifPresent(txt2 -> System.out.println(txt2));  // -> (出力無し)
    }
    
    /**
     * 文字列に含まれる大文字をすべて小文字に変換する。
     * @txt 小文字に変換する文字列。nullも許容される。
     * @return 小文字に変換されたOptional<String>型の文字列。
     */
    public static Optional<String> toLowerCaseNullable(String txt) {
        return Optional.ofNullable(txt).map(String::toLowerCase);
    }
}

サンプルコード2

orElse:(レシーバの)値がnullの時にデフォルト値を返す。

  • 以下のgetEmployeeName()では、empMap.get(empId)がnullの時にorElse()に入ってデフォルト値である「該当者はいません」を返します。
import java.util.*;

public class Main {
    
    // 従業員のIDと名前の対応表
    private static final Map<Integer, String> empMap = Map.of(
        1, "sato",
        2, "tanaka",
        3, "suzuki",
        4, "takahashi",
        5, "ito"
    );
    
    public static void main(String[] args) throws Exception {
        
        var name1 = getEmployeeName(1);
        var name2 = getEmployeeName(123);
        
        System.out.println(name1);
        System.out.println(name2);
    }
    
    /**
     * 従業員のIDをキーにして、対応表から従業員名を取得して返す。
     * @empId 従業員のID。
     * @return 従業員名。従業員のIDに該当するレコードが無ければエラーメッセージを返す。
     */
    public static String getEmployeeName(int empId) {
        return Optional.ofNullable(empMap.get(empId)).orElse("該当者はいません");
    }
}

参考URL

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?