プログラミング勉強日記
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とは?使い方をパターン別にわかりやすく解説