1
0

More than 3 years have passed since last update.

【Java】Optionalの使い方②

Last updated at Posted at 2021-01-02

プログラミング勉強日記

2021年1月2日
昨日の記事同様にJavaのOptionalクラスの使い方について簡単にまとめる。昨日扱っていないメソッドでの使い方を紹介する。

orElseThrowメソッドの使い方

 orElseThrowメソッドは、引数の有無で処理が異なる。

 引数がない場合は、nullのときにNoSuchElementExceptionをスローして、nullでないときは値を返す。

引数なしの場合
import java.util.NoSuchElementException;
import java.util.Optional;

public class Sample {
    public static void main(String[] args) {
        String str = null;
        Optional<String> value = Optional.ofNullable(str);
        try {
            str = value.orElseThrow();
            System.out.println(str);
        } catch (NoSuchElementException ex) {
            System.out.println("nullです");
        }
    }
}
実行結果
nullです

 引数がある場合は、例外をスルーする例外クラスのオブジェクトを指定できる。

引数ありの場合
import java.util.Optional;

public class Sample {
    public static void main(String[] args) {
        String str = null;
        Optional<String> value = Optional.ofNullable(str);
        try {
            System.out.println(value.orElseThrow(() -> new RuntimeException()));
        } catch (RuntimeException e) {
            System.out.println("nullです");
        }    
    }
}
実行結果
nullです

streamメソッドの使い方

 nullチェックをせずにOptional型のオブジェクトからnullでないものだけを取り出すことができる。

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

public class Sample {
    public static void main(String[] args) {
        List<String> list1 = List.of("Tanaka", "Yamada");
        List<String> list2 = null;

        Optional<List<String>> value1 = Optional.ofNullable(list1);
        Optional<List<String>> value2 = Optional.ofNullable(list2);

        value1.stream().flatMap(x -> x.stream()).forEach(System.out::println);
        value2.stream().flatMap(x -> x.stream()).forEach(System.out::println);
    }

}
実行結果
Tanaka
Yamada

ifPresentメソッドの使い方

 nullではない場合にのみ引数に指定した処理を行う。

import java.util.Optional;

public class Sample {
    public static void main(String[] args) {
        String str = null;
        Optional<String> value = Optional.ofNullable(str);
        value.ifPresent(System.out::println);
    }

}
実行結果
strがnullなので処理は行われない

ifPresentOrElseメソッドの使い方

 nullの場合でも処理を行える。nullでない場合の処理を第1引数に指定し、nullの場合の処理を第2引数に指定する。

import java.util.Optional;

public class Sample {
    public static void main(String[] args) {
        String str = null;
        Optional<String> value = Optional.ofNullable(str);
        value.ifPresentOrElse(
            System.out::println, 
            () -> System.out.println("nullです"));
    }

}
実行結果
nullです

参考文献

JavaでOptionalクラスを使う方法【初心者向け】
JavaのOptionaとは?使い方をパターン別にわかりやすく解説

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