モジュール java.base
パッケージ java.util

クラスOptional<T>

java.lang.Object
java.util.Optional<T>
型パラメータ:
T - 価値のタイプ

public final class Optional<T> extends Object
null以外の値を含む場合と含まない場合があるコンテナ・オブジェクト。 値が存在する場合、isPresent()trueを返します。 値が存在しない場合、オブジェクトはemptyとみなされ、isPresent()falseを返します。

orElse() (値がない場合はデフォルト値を返します)やifPresent() (値が存在する場合にアクションを実行)など、含まれている値の有無に依存する追加のメソッドが提供されます。

これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。

APIのノート:
Optionalは、主に、"結果なし、"を表す明確な必要があり、nullを使用するとエラーが発生する可能性があるメソッドの戻り型として使用することを目的としています。 型がOptionalの変数は、それ自体がnullになることはなく、常にOptionalインスタンスを指す必要があります。
導入されたバージョン:
1.8
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static <T> Optional<T>
    空のOptionalインスタンスを返します。
    boolean
    他のオブジェクトがこのOptionalに"に等しい"かどうかを示します。
    filter(Predicate<? super T> predicate)
    値が存在し、その値が指定された述語と一致する場合は、値を記述するOptionalを戻し、それ以外の場合は空のOptionalを戻します。
    <U> Optional<U>
    flatMap(Function<? super T,? extends Optional<? extends U>> mapper)
    値が存在する場合は、指定されたOptional-bearingマッピング関数を値に適用した結果を返し、それ以外の場合は空のOptionalを返します。
    get()
    値が存在する場合は値を返し、存在しない場合はNoSuchElementExceptionをスローします。
    int
    値のハッシュ・コード(存在する場合)を返します。値がない場合は0 (zero)を返します。
    void
    ifPresent(Consumer<? super T> action)
    値が存在する場合は、指定されたアクションを値とともに実行し、それ以外の場合は何も実行しません。
    void
    ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
    値が存在する場合は、指定されたアクションを値とともに実行し、それ以外の場合は、指定された空ベースのアクションを実行します。
    boolean
    値が存在しない場合はtrue、それ以外の場合falseを返します。
    boolean
    値が存在する場合、true、それ以外の場合はfalseを返します。
    <U> Optional<U>
    map(Function<? super T,? extends U> mapper)
    値が存在する場合は、指定されたマッピング関数を値に適用した結果として(ofNullable(T)のように)を記述するOptionalを返し、それ以外の場合は空のOptionalを返します。
    static <T> Optional<T>
    of(T value)
    指定された非null値を記述するOptionalを返します。
    static <T> Optional<T>
    ofNullable(T value)
    null以外の場合は、指定された値を記述するOptionalを返します。それ以外の場合は、空のOptionalを返します。
    or(Supplier<? extends Optional<? extends T>> supplier)
    値が存在する場合は、値を記述するOptionalを戻し、それ以外の場合は、指定関数によって生成されたOptionalを戻します。
    orElse(T other)
    値が存在する場合は値を返し、存在しない場合はotherを返します。
    orElseGet(Supplier<? extends T> supplier)
    値が存在する場合は値を返し、それ以外の場合は供給関数によって生成された結果を返します。
    値が存在する場合は値を返し、存在しない場合はNoSuchElementExceptionをスローします。
    <X extends Throwable>
    T
    orElseThrow(Supplier<? extends X> exceptionSupplier)
    値が存在する場合は値を返し、それ以外の場合は例外指定関数によって生成された例外をスローします。
    値が存在する場合は、その値のみを含む順次Streamを戻し、それ以外の場合は空のStreamを戻します。
    デバッグに適したこのOptionalの空でない文字列表現を返します。

    クラスjava.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • メソッドの詳細

    • empty

      public static <T> Optional<T> empty()
      空のOptionalインスタンスを返します。 このOptionalには値はありません。
      APIのノート:
      これは一時的なものですが、Optional.empty()によって返されたインスタンスと==または!=を比較して、オブジェクトが空であるかどうかをテストしないでください。 シングルトンである保証はありません。 かわりに、isEmpty()またはisPresent()を使用してください。
      型パラメータ:
      T - 存在しない値の型
      戻り値:
      空のOptional
    • of

      public static <T> Optional<T> of(T value)
      指定された非null値を記述するOptionalを返します。
      型パラメータ:
      T - 値の型
      パラメータ:
      value - 記述する値。null以外である必要があります
      戻り値:
      存在する値でのOptional
      例外:
      NullPointerException - 値がnullの場合
    • ofNullable

      public static <T> Optional<T> ofNullable(T value)
      null以外の場合は、指定された値を記述するOptionalを返します。それ以外の場合は、空のOptionalを返します。
      型パラメータ:
      T - 値の型
      パラメータ:
      value - 説明するnullの値
      戻り値:
      指定された値が非nullの場合は現在の値を持つOptional、それ以外の場合は空のOptional
    • get

      public T get()
      値が存在する場合は値を返し、存在しない場合はNoSuchElementExceptionをスローします。
      APIのノート:
      このメソッドの代替として優先される方法は、orElseThrow()です。
      戻り値:
      このOptionalによって記述される非null
      例外:
      NoSuchElementException - 値が存在しない場合
    • isPresent

      public boolean isPresent()
      値が存在する場合、true、それ以外の場合はfalseを返します。
      戻り値:
      値が存在する場合はtrue、存在しない場合はfalse
    • isEmpty

      public boolean isEmpty()
      値が存在しない場合はtrue、それ以外の場合falseを返します。
      戻り値:
      値が存在しない場合はtrue、それ以外の場合はfalse
      導入されたバージョン:
      11
    • ifPresent

      public void ifPresent(Consumer<? super T> action)
      値が存在する場合は、指定されたアクションを値とともに実行し、それ以外の場合は何も実行しません。
      パラメータ:
      action - 値が存在する場合、実行するアクション
      例外:
      NullPointerException - 値が存在し、与えられたアクションがnullの場合
    • ifPresentOrElse

      public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
      値が存在する場合は、指定されたアクションを値とともに実行し、それ以外の場合は、指定された空ベースのアクションを実行します。
      パラメータ:
      action - 値が存在する場合、実行するアクション
      emptyAction - 値が存在しない場合、実行される空ベースのアクション
      例外:
      NullPointerException - 値が存在し、指定されたアクションがnullの場合、または値が存在しない場合、指定された空のアクションはnullです。
      導入されたバージョン:
      9
    • filter

      public Optional<T> filter(Predicate<? super T> predicate)
      値が存在し、その値が指定された述語と一致する場合は、値を記述するOptionalを戻し、それ以外の場合は空のOptionalを戻します。
      パラメータ:
      predicate - 値に適用される述語(存在する場合)
      戻り値:
      このOptionalの値を記述するOptional(値が存在し、値が指定された述語と一致する場合)、それ以外の場合は空のOptional
      例外:
      NullPointerException - 述語がnullの場合
    • map

      public <U> Optional<U> map(Function<? super T,? extends U> mapper)
      値が存在する場合は、指定されたマッピング関数を値に適用した結果として(ofNullable(T)のように)を記述するOptionalを返し、それ以外の場合は空のOptionalを返します。

      マッピング関数がnullの結果を返した場合、このメソッドは空のOptionalを返します。

      APIのノート:
      このメソッドは、Optional値に対する後処理をサポートします。戻りステータスを明示的にチェックする必要はありません。 たとえば、次のコードはURIのストリームをトラバースし、まだ処理されていないものを選択して、そのURIからパスを作成し、Optional<Path>を返します:
      
           Optional<Path> p =
               uris.stream().filter(uri -> !isProcessedYet(uri))
                             .findFirst()
                             .map(Paths::get);
       
      ここで、findFirstOptional<URI>を返し、mapは目的のURIが存在する場合はそのURIのOptional<Path>を返します。
      型パラメータ:
      U - マッピング関数から返される値の型
      パラメータ:
      mapper - 値に適用するマッピング関数(存在する場合)
      戻り値:
      値が存在する場合はマッピング関数をこのOptionalの値に適用した結果を記述するOptional、それ以外の場合は空のOptional
      例外:
      NullPointerException - マッピング関数がnullの場合
    • flatMap

      public <U> Optional<U> flatMap(Function<? super T,? extends Optional<? extends U>> mapper)
      値が存在する場合は、指定されたOptional-bearingマッピング関数を値に適用した結果を返し、それ以外の場合は空のOptionalを返します。

      このメソッドはmap(Function)と似ていますが、マッピング関数は、結果がすでにOptionalである関数であり、呼び出された場合、flatMapはそれを追加のOptional内でラップしません。

      型パラメータ:
      U - マッピング関数によって返されたOptionalの値の型
      パラメータ:
      mapper - 値に適用するマッピング関数(存在する場合)
      戻り値:
      値が存在する場合はOptional生成マッピング関数をこのOptionalの値に適用した結果、それ以外の場合は空のOptional
      例外:
      NullPointerException - マッピング関数がnullの場合、またはnullの結果を返す場合
    • or

      public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
      値が存在する場合は、値を記述するOptionalを戻し、それ以外の場合は、指定関数によって生成されたOptionalを戻します。
      パラメータ:
      supplier - 戻されるOptionalを生成する供給関数
      戻り値:
      このOptionalの値を記述するOptionalを返します(値が存在する場合)。それ以外の場合は、指定関数によって生成されるOptionalを返します。
      例外:
      NullPointerException - 供給関数がnullまたはnull結果を生成する場合
      導入されたバージョン:
      9
    • stream

      public Stream<T> stream()
      値が存在する場合は、その値のみを含む順次Streamを戻し、それ以外の場合は空のStreamを戻します。
      APIのノート:
      このメソッドは、任意の要素のStreamを現在の値要素のStreamに変換するために使用できます:
      
           Stream<Optional<T>> os = ..
           Stream<T> s = os.flatMap(Optional::stream)
       
      戻り値:
      オプションの値はStreamです。
      導入されたバージョン:
      9
    • orElse

      public T orElse(T other)
      値が存在する場合は値を返し、存在しない場合はotherを返します。
      パラメータ:
      other - 値が存在しない場合、返される値。 nullも可。
      戻り値:
      値(存在する場合)、それ以外の場合はother
    • orElseGet

      public T orElseGet(Supplier<? extends T> supplier)
      値が存在する場合は値を返し、それ以外の場合は供給関数によって生成された結果を返します。
      パラメータ:
      supplier - 戻される値を生成する供給関数
      戻り値:
      値が存在する場合は、それ以外の場合は、供給機能によって生成される結果
      例外:
      NullPointerException - 値が存在せず、供給関数がnullの場合
    • orElseThrow

      public T orElseThrow()
      値が存在する場合は値を返し、存在しない場合はNoSuchElementExceptionをスローします。
      戻り値:
      このOptionalによって記述される非null
      例外:
      NoSuchElementException - 値が存在しない場合
      導入されたバージョン:
      10
    • orElseThrow

      public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
      値が存在する場合は値を返し、それ以外の場合は例外指定関数によって生成された例外をスローします。
      APIのノート:
      引数リストが空である例外コンストラクタへのメソッド参照をサプライヤとして使用できます。 たとえば、IllegalStateException::newなどです。
      型パラメータ:
      X - スローされる例外の型
      パラメータ:
      exceptionSupplier - スローされる例外を生成する供給関数
      戻り値:
      値がある場合
      例外:
      X - 値が存在しない場合
      NullPointerException - 値が存在せず、例外を提供する関数がnullの場合
    • equals

      public boolean equals(Object obj)
      他のオブジェクトがこのOptionalに"に等しい"かどうかを示します。 他方のオブジェクトは次の場合に同等と見なされます。
      • それもOptionalである、および
      • 両方のインスタンスに存在する値がない、または
      • 存在する値がequals()によってお互いに等しい。
      オーバーライド:
      equals、クラスObject
      パラメータ:
      obj - 等価性を判定されるオブジェクト
      戻り値:
      true他のオブジェクトが"に等しい"の場合はこのオブジェクト、そうでない場合はfalse
      関連項目:
    • hashCode

      public int hashCode()
      値のハッシュ・コード(存在する場合)を返します。値がない場合は0 (zero)を返します。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      現在値のハッシュ・コード値または値が存在しない場合の0
      関連項目:
    • toString

      public String toString()
      デバッグに適したこのOptionalの空でない文字列表現を返します。 正確な表示フォーマットは未指定であり、実装とバージョンの間で異なることがあります。
      オーバーライド:
      toString、クラスObject
      実装要件:
      値が存在する場合は、結果にその文字列表現が含まれる必要があります。 空および現在のOptionalは、明確に区別できる必要があります。
      戻り値:
      このインスタンスの文字列表現