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

クラスOptional<T>

  • 型パラメータ:
    T - 価値のタイプ

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

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

    これは値ベースのクラスで、Optionalのインスタンスに対して、ID依存操作(参照等価性(==)、IDハッシュ・コード、同期など)を使用すると、予期できない結果になる可能性があり、避けてください。

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

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

      • empty

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

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

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

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