Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java 9】Optionalクラスに追加された3つの新メソッド(or / ifPresentOrElse / stream)を解説


Optionalクラスは、null以外の値を保持しているかもしれないし、保持していないかもしれない——そんな状態を表現できるコンテナを提供します。このクラスはJava 8で導入され、コード中でNullPointerExceptionが発生しうる箇所を減らすことを目的としています。さらにJava 9では、デフォルト値の扱いをより柔軟にするための3つの新メソッド、or()ifPresentOrElse()stream()が追加されました。

Optional.or()

or()メソッドはJava 9で導入され、引数として関数型インターフェースのSupplierを受け取ります。このメソッドは常に「空ではないOptional」を返すのが特徴です。元のOptionalオブジェクトに値が存在すればそのオブジェクト自身を返し、空の場合はSupplierが生成した新しいOptionalオブジェクトを返します。

サンプルコード

import java.io.IOException;
import java.util.Optional;

public class OptionalOrMethodTest {
    public static void main(String[] args) throws IOException {
        String str = null;
        Optional<String> opt = Optional.ofNullable(str);
        Optional<String> result = opt.or(() -> Optional.of("Adithya"));
        System.out.println(result);
    }
}

実行結果

Optional[Adithya]

Optional.ifPresentOrElse()

ifPresentOrElse()メソッドもJava 9で追加されました。既存のifPresent()メソッドとよく似ていますが、異なるのはRunnable型の引数が1つ追加されている点です。これにより、Optionalオブジェクトが空だった場合に実行する代替処理を、ラムダ式などで簡潔に指定できます。

サンプルコード

import java.util.Optional;

public class OptionalIfPresentOrElseTest {
    public static void main(String[] args) {
        String str = null;
        Optional<String> opt = Optional.ofNullable(str);
        opt.ifPresentOrElse(
                x -> System.out.println(x),
                () -> System.out.println("No value"));
    }
}

実行結果

No value

Optional.stream()

stream()メソッドはJava 9以降で利用できます。Optionalオブジェクトから新しいStreamオブジェクトを生成するためのメソッドで、Optionalが値を保持していれば、その値を含むStreamを返します。特に、複数のOptionalを含むリストから空の要素を除外して値だけを抽出したい場合に、flatMap(Optional::stream)と組み合わせると非常に便利です。

サンプルコード

import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class OptionalStreamMethodTest {
    public static void main(String[] args) {
        List<Optional<String>> list = List.of(
                Optional.of("Jai"),
                Optional.empty(),
                Optional.of("Adithya"));

        Stream<String> stream = list.stream().flatMap(Optional::stream);
        stream.forEach(System.out::println);
    }
}

実行結果

Jai
Adithya

まとめ

Java 9で追加されたor()ifPresentOrElse()stream()の3つのメソッドを活用することで、nullチェック、デフォルト値の設定、複数のOptionalを扱う処理を、より簡潔かつ安全に記述できるようになります。NullPointerExceptionを未然に防ぎながら可読性の高いコードを実現するために、ぜひ日常の開発で活用してみてください。

  1. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性

  2. JavaにおけるCursorクラスの役割とは?マウスカーソル制御の基本を解説

    JavaのCursorクラスとはCursorクラスは、Objectクラスのサブクラスであり、画面上のポイント(指し示す位置)やインジケーター(表示標識)として定義されます。ユーザーがマウスを使ってシステムへの入力を選択・操作する際に、その位置を視覚的に示す重要な役割を担っています。GUIアプリケーションでは、状況に応じてカーソルの形状を変えることで、ユーザーに対して直感的なフィードバックを提供できます。例えば、処理中であることを伝える砂時計型のカーソルや、クリック可能な要素を示す手型のカーソルなどが代表的な例です。利用可能なカーソルの種類Cursorクラスには、あらかじめ定義されたさまざまなカ