Java プログラムで null 値を処理する必要がある場合、Java Optional は非常に便利なツール クラスです。これは Java 8 で導入され、より良いソリューションを提供します。この記事ではJava Optionalの使い方とサンプルコードを紹介します。
1. Javaオプションとは何ですか
Java Optional は、null または非 null 値を含めることができるコンテナです。これは、null 値の可能性がある値を安全に処理するためのメソッドを提供するクラスです。
Java Optional クラスには、Optional と OptionalDouble という 2 つのサブクラスがあります。Optional は、任意の型のオブジェクトを含めることができるジェネリック クラスです。そして、OptionalDouble は double 型のための特別な Optional クラスです。さらに、Java には、int 型とlong 型の null 値を処理するための 2 つのクラス (OptionalInt と OptionalLong) も提供されています。
Java 8 より前では、NullPointerException がコード内に現れることがよくありました。これは通常、コードが null オブジェクト参照を使用しようとしていることが原因です。例えば:
String name = null;
System.out.println(name.length());
この例では、変数名が null であるため、length() メソッドを呼び出そうとすると、null ポインタ例外が発生します。
この問題を解決するために、Java 8 では Optional 型が導入されました。
Optional は、アプリケーションで null 値を使用できないようにするオプションの値を含むオブジェクト コンテナーです。オプションのオブジェクトには、null 以外の値を含めることも、空にすることもできます。
2. オプションの使用方法は?
Optional タイプにはいくつかの異なる用途があります。そのうちのいくつかは次のとおりです。
オプションのオブジェクトを作成する
静的メソッド of() を使用して、null 以外の値を含む Optional オブジェクトを作成できます。
たとえば、文字列「hello」を含む Optional オブジェクトを作成するには、次のコードを使用できます。
Optional<String> optional = Optional.of("hello");
静的メソッド ofNullable() を使用して、Optional オブジェクトを作成することもできます。of() とは異なり、ofNullable() メソッドは、渡された値が null の場合、空の Optional オブジェクトを作成します。
Optional<String> optional = Optional.ofNullable(null);
Optional オブジェクトに値が含まれているかどうかを確認します
isPresent() メソッドを使用して、Optional オブジェクトに値が含まれているかどうかを確認できます。isPresent() メソッドは、存在する場合は true を返し、存在しない場合は false を返します。
Optional<String> optional = Optional.of("hello");
if (optional.isPresent()) {
System.out.println("value is present");
} else {
System.out.println("value is absent");
}
Optional オブジェクトの値を取得します
get() メソッドを使用して、Optional オブジェクトから値を取得できます。Optional オブジェクトに値が含まれていない場合、get() メソッドは NoSuchElementException をスローします。
Optional<String> optional = Optional.of("hello");
String value = optional.get();
System.out.println(value);
例外がスローされる可能性があるため、get() メソッドの使用は避けてください。代わりに、 orElse() メソッドを使用して、Optional オブジェクトに値が含まれていない場合に返されるデフォルト値を提供できます。
Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElse("default");
System.out.println(value);
オプションのオブジェクトのチェーン化
Optional 型には、Optional オブジェクトへの呼び出しを連鎖するための便利なメソッドも多数用意されています。たとえば、map() メソッドを使用して、Optional オブジェクトの値を他の型に変換できます。
Optional<String> optional = Optional.of("hello");
Optional<Integer> length = optional.map(String::length);
System.out.println(length.get());
flatMap() メソッドを使用して、Optional オブジェクトを別の Optional オブジェクトに変換することもできます。
Optional<String> optional = Optional.of("hello");
Optional<String> result = optional.flatMap(value -> Optional.of(value.toUpperCase()));
System.out.println(result.get());
3. Javaの共通メソッド オプション
Java Optional クラスには多くの便利なメソッドが用意されており、ここではその一部を紹介します。
ofNullable() 方法
ofNullable() メソッドはパラメータとしてオブジェクトを受け取り、オブジェクトが null の場合は空の Optional オブジェクトを返します。それ以外の場合は、オブジェクトを Optional コンテナーにラップします。
サンプルコードは次のとおりです。
String str = null;
Optional<String> optional = Optional.ofNullable(str);
isPresent() メソッド
isPresent() メソッドは、Optional オブジェクトに null 以外の値があるかどうかを確認するために使用されます。存在する場合は true を返し、存在しない場合は false を返します。
サンプルコードは次のとおりです。
String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
if (optional.isPresent()) {
System.out.println("String value: " + optional.get());
}
ifPresent() メソッド
ifPresent() メソッドは、Optional オブジェクトに null 以外の値があるかどうかを確認するために使用されます。存在する場合は指定されたアクションを実行しますが、存在しない場合は実行しません。
サンプルコードは次のとおりです。
String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
optional.ifPresent(s -> System.out.println("String value: " + s));
orElse() 方法
orElse() メソッドは、Optional オブジェクトが空の場合にデフォルト値を返すために使用されます。Optional オブジェクトが空でない場合は、Optional オブジェクトの値を返します。
サンプルコードは次のとおりです。
String str = null;
String defaultValue = "Default Value";
String value = Optional.ofNullable(str).orElse(defaultValue);
System.out.println("String value: " + value);
map() メソッド
map() メソッドは、指定されたマッピング関数を通じて Optional オブジェクトの値を別の型に変換するために使用されます。
サンプルコードは次のとおりです。
String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
Optional<Integer> lengthOptional = optional.map(String::length);
lengthOptional.ifPresent(length -> System.out.println("String length: " + length));
filter() メソッド
filter() メソッドは、Optional オブジェクトの値をフィルタリングするために使用されます。指定された条件が満たされる場合は Optional オブジェクトが返され、それ以外の場合は空の Optional オブジェクトが返されます。
サンプルコードは次のとおりです。
import java.util.Optional;
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class OptionalFilterExample {
public static void main(String[] args) {
User user = new User("John", 30);
Optional<User> optionalUser = Optional.of(user);
Optional<User> filteredUser = optionalUser.filter(u -> u.getAge() >= 18);
if (filteredUser.isPresent()) {
System.out.println(filteredUser.get().getName() + " is an adult.");
} else {
System.out.println("No adult user found.");
}
}
}