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

Java 9のStream.ofNullable()メソッドとは?nullチェックを回避する使い方を解説

ofNullable()メソッドは、Streamクラスに用意された静的メソッドです。引数として渡した値がnullでない場合には、その要素を1つだけ含む順次ストリーム(sequential Stream)を返し、値がnullの場合は空のストリームを返します。

Java 9で導入されたこのメソッドは、NullPointerException(ヌルポインタ例外)の発生を未然に防ぎ、ストリーム操作の前に行う煩雑なnullチェックを不要にすることを目的としています。つまり、nullの可能性がある値を安全にストリーム処理へ流したい場面で非常に役立ちます。

構文

static <T> Stream<T> ofNullable(T t)

使用例1:nullと非nullの要素数をカウントする

import java.util.stream.Stream;
public class OfNullableMethodTest1 {
    public static void main(String args[]) {
        System.out.println("TutorialsPoint");
        int count = (int) Stream.ofNullable(5000).count();
        System.out.println(count);
        System.out.println("Tutorix");
        count = (int) Stream.ofNullable(null).count();
        System.out.println(count);
    }
}

実行結果

TutorialsPoint
1
Tutorix
0

この例では、5000という非nullの値を渡した場合は要素数「1」が返されます。一方、nullを渡した場合は空のストリームが生成されるため、カウント結果は「0」になります。

使用例2:forEachでの出力挙動を確認する

import java.util.stream.Stream;
public class OfNullableMethodTest2 {
    public static void main(String args[]) {
        String str = null;
        Stream.ofNullable(str).forEach(System.out::println); // コンソールには何も表示されない
        str = "TutorialsPoint";
        Stream.ofNullable(str).forEach(System.out::println); // TutorialsPoint と表示される
    }
}

実行結果

TutorialsPoint

変数がnullの状態では空のストリームが返されるためforEachは何も実行せず、値が代入された後はその文字列が出力されます。このように、事前のnull判定を書かずとも安全に処理を記述できるのが大きな特徴です。

ofNullable()メソッドを使うべき場面

  • 外部APIやデータベースなどから取得した値がnullになる可能性がある場合
  • if文によるnullチェックを省略し、ストリームパイプラインを途切れさせずに処理を続けたい場合
  • nullを除外しながらmap()やfilter()などの中間操作を安全に組み合わせたい場合

このように、ofNullable()メソッドを活用することで、null安全性を保ちながら簡潔で読みやすいストリーム処理を実現できます。特にOptionalと組み合わせた設計において、その効果を最大限に発揮します。

  1. Javaのpack()メソッドとは?使い方とsetSize()との違いを解説

    pack()メソッドは、JavaのWindowクラスで定義されているメソッドで、フレーム内のすべてのコンポーネントがそれぞれの推奨サイズ(preferred size)以上で表示されるように、ウィンドウのサイズを自動的に調整します。 代替手段として、setSize()メソッドやsetBounds()メソッドを呼び出して、フレームのサイズを明示的に指定する方法もあります。しかし一般的には、pack()メソッドを使用する方がsetSize()よりも推奨されています。その理由は、pack()がフレームのサイズ決定をレイアウトマネージャーに委ねることができ、レイアウトマネージャーはプラットフォーム間の

  2. JavaのsetBounds()メソッドとは?使い方とサンプルコードを解説

    JavaのGUIプログラミングでは、レイアウトマネージャー(Layout Manager)がコンポーネントの位置やサイズを自動的に決定します。しかし、レイアウトマネージャーを使用しない場合は、コンポーネントの位置とサイズを手動で設定する必要があります。そのような場面で活躍するのがsetBounds()メソッドです。フレームのレイアウトマネージャーをnullに設定することで、コンポーネントの位置とサイズを自由に指定できるようになります。setBounds()メソッドの基本setBounds()メソッドは4つの引数を取ります。第1引数と第2引数はコンポーネントの左上隅のx座標・y座標、第3引数はコ