お待ちください...

小波Note

四川 · 成都市14 ℃
日本語

Java Optional

成都 (cheng du)2024/8/27 17:50:173.24k見積もり読書時間 10 分お気に入りCtrl + D / ⌘ + D
cover
IT FB(up 主)
バックエンド開発エンジニア

Optional は Java 8 で導入されたコンテナクラスで、非null値を含む可能性があるオブジェクトを表します。主に NullPointerException を回避し、よりエレガントなnull値処理を提供するために使用されます。以下は一般的な Optional の使用例です。

Optional オブジェクトの作成

Optional.of(value):非null値を含む Optional オブジェクトを作成します。

Optional.ofNullable(value):null値を含む可能性がある Optional オブジェクトを作成します。

Optional.empty():空の Optional オブジェクトを作成します。

Optional に値が含まれているかを確認

isPresent()Optional に値が含まれている場合は true を返します。

ifPresent(Consumer<? super T> action)Optional に値が含まれている場合は、指定されたアクションを実行します。

Optional の値を取得

get()Optional に値が含まれている場合はその値を返し、そうでない場合は NoSuchElementException をスローします。

orElse(T other)Optional に値が含まれている場合はその値を返し、そうでない場合はデフォルト値を返します。

orElseGet(Supplier<? extends T> other)Optional に値が含まれている場合はその値を返し、そうでない場合は Supplier を呼び出してその結果を返します。

orElseThrow(Supplier<? extends X> exceptionSupplier)Optional に値が含まれている場合はその値を返し、そうでない場合は Supplier によって提供される例外をスローします。

Optional の値を変換

map(Function<? super T, ? extends U> mapper)Optional に値が含まれている場合はマッピング関数を適用し、新しい Optional を返します。

flatMap(Function<? super T, Optional<U>> mapper):map と似ていますが、マッピング関数が Optional を返し、Optional がネストされません。

java
        import java.util.Optional;

public class OptionalExamples {

    public static void main(String[] args) {
        // Optional オブジェクトの作成
        Optional<String> nonEmptyOptional = Optional.of("Hello, World!");
        Optional<String> nullableOptional = Optional.ofNullable(null);
        Optional<String> emptyOptional = Optional.empty();

        // Optional に値が含まれているかを確認
        System.out.println("nonEmptyOptional is present: " + nonEmptyOptional.isPresent());
        System.out.println("nullableOptional is present: " + nullableOptional.isPresent());
        System.out.println("emptyOptional is present: " + emptyOptional.isPresent());

        // Optional の値を取得
        System.out.println("nonEmptyOptional value: " + nonEmptyOptional.get());
        System.out.println("nullableOptional value or default: " + nullableOptional.orElse("Default Value"));
        System.out.println("emptyOptional value or default: " + emptyOptional.orElse("Default Value"));

        // ifPresent を使用して操作を実行
        nonEmptyOptional.ifPresent(value -> System.out.println("Value is present: " + value));

        // Optional の値を変換
        Optional<Integer> lengthOptional = nonEmptyOptional.map(String::length);
        System.out.println("Length of nonEmptyOptional value: " + lengthOptional.orElse(0));

        // flatMap を使用してネストされた Optional を処理
        Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Nested Value"));
        Optional<String> flatMappedValue = nestedOptional.flatMap(opt -> opt);
        System.out.println("FlatMapped value: " + flatMappedValue.orElse("No Value"));
    }
}