プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

Java Optional型の使い方

Optional型とは

Null以外の値が含まれている場合も含まれていない場合もあるクラス
 
 

■Optional型の使用例

package sample;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class Main {
    public static void main(String[] args) {

        //テスト用にリストを用意
        List<String> list = Arrays.asList("a", "bb", null);

        //Optional型を使わない場合
        for (String item : list) {
            //If文でNullチェック
            if (item != null) {
                System.out.println(item.length());
            }
        }

        //Optional型を使った場合
        for (String item : list) {
            //ofNullableメソッドで、引数をOptional型にラップ
            Optional<String> optional = Optional.ofNullable(item);
            //値がNullでない場合に文字数を出力
            optional.ifPresent(op -> System.out.println(op.length()));
        }

        //Optional型・ラムダ式を使い、for文を使わない場合
        list.forEach(item -> {
            //ofNullableメソッドで、引数をOptional型にラップ
            Optional<String> optional = Optional.ofNullable(item);
            //値がNullでない場合に文字数を出力
            optional.ifPresent(op -> System.out.println(op.length()));
        });
    }
}

 
 


■Optional型の代表的なメソッド

ofNullable

指定された値がNullでない場合はその値を記述するOptionalを返す
Nullの場合はは空のOptionalを返す
 
 


ifPresent

値がNullでない場合は処理を実行
 
 


orElse

値がNullでない場合は値を返す
値がNullの場合は引数を返す
 
 


flatMap

値がNullでない場合は指定されたOptional生成マッピング関数をその値に適用し、その結果を返す
値がNullの場合は空のOptionalを返す

List<Object> stream = customerList.stream().flatMap(e -> Stream.of(e.getId(), e)).collect(Collectors.toList());