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

Java 9のOptional.ifPresentOrElse()メソッドの目的と使い方を解説

Java 9でOptionalクラスに追加されたifPresentOrElse()メソッドは、値の有無に応じて異なる処理を1つのメソッド呼び出しで実行できる便利な機能です。このメソッドは2つの引数を受け取ります。1つ目はConsumer(値が存在する場合の処理)、2つ目はRunnable(値が存在しない場合の処理)です。

ifPresentOrElse()メソッドの目的

ifPresentOrElse()メソッドの主な目的は、Optionalが値を保持している場合に、その値に対してアクション関数を実行する(action.accept(value)を呼び出す)ことです。この動作は従来のifPresent()メソッドと一致しています。

ifPresent()メソッドとの違いは、ifPresentOrElse()には第2引数としてemptyActionが用意されている点です。Optionalが値を保持していない場合、ifPresentOrElse()メソッドはemptyAction.run()を呼び出します。これにより、if-else文を書かずに値の有無に応じた分岐処理を簡潔に記述できるようになります。

構文

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

使用例

以下のコードでは、値が存在する場合と空の場合の両方のパターンを確認できます。

import java.util.Optional;

public class IfPresentOrElseMethodTest {
   public static void main(String args[]) {
      Optional<Integer> optional = Optional.of(1);

      optional.ifPresentOrElse(x -> System.out.println("Value: " + x), () ->
                                    System.out.println("Not Present"));

      optional = Optional.empty();

      optional.ifPresentOrElse(x -> System.out.println("Value: " + x), () ->
                                    System.out.println("Not Present"));
   }
}

実行結果

Value: 1
Not Present

この実行結果から、最初の呼び出しではOptionalに値「1」が存在するためConsumerの処理が実行され、2回目の呼び出しではOptional.empty()で空のOptionalを作成しているためRunnableの処理が実行されていることがわかります。

ifPresentOrElse()メソッドを活用することで、nullチェックやif-else文による分岐を避け、より読みやすく安全なコードを書くことができます。特に、値が存在しない場合のフォールバック処理(デフォルト値の設定やログ出力など)を記述したい場合に非常に有効です。

  1. Javaのpaint()メソッドとrepaint()メソッドの違いをわかりやすく解説

    JavaでGUIアプリケーションを開発する際、コンポーネントの描画に関わるpaint()メソッドとrepaint()メソッドは、役割がまったく異なる重要なメソッドです。この記事では、両者の違いと正しい使い方を具体例とともに解説します。 paint()メソッドとrepaint()メソッドの違い paint()メソッドとは paint()は、コンポーネントを実際に描画するための処理(描画命令)を記述するメソッドです。Java AWTでは、このメソッドをオーバーライドして独自の描画処理を実装します。 一方、Java SwingではpaintComponent()メソッドをオーバーライドするのが推奨さ

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

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