モジュール java.base

パッケージjava.util.function


パッケージjava.util.function
関数型インタフェースは、ラムダ式やメソッド参照のターゲットとなる型を提供します。 各関数型インタフェースには、その関数型インタフェースの関数メソッドと呼ばれる単一の抽象メソッドが含まれており、ラムダ式のパラメータや戻り値の型のマッチングや適応は、そのメソッドに対して行われます。 関数型インタフェースは代入の文脈、メソッド呼び出しの文脈、キャストの文脈など、さまざまな文脈でターゲットの型を提供できます。

     // Assignment context
     Predicate<String> p = String::isEmpty;

     // Method invocation context
     stream.filter(e -> e.getSize() > 10)...

     // Cast context
     stream.map((ToIntFunction) e -> e.getSize())...
 

このパッケージ内のインタフェースはJDKで使用される汎用の関数型インタフェースですが、これらはユーザーコードでも使用可能です。 これらは、ラムダ式の適応先として考えられる関数形式の完全なセットを特定するわけではありませんが、一般的な要件をカバーできるだけの十分なセットを提供します。 特定の目的のために提供される他の関数型インタフェース(FileFilterなど)は、使用されるパッケージ内で定義されています。

このパッケージ内のインタフェースには注釈FunctionalInterfaceが付けられています。 この注釈は、コンパイラがあるインタフェースを関数型インタフェースとして認識するのに必須のものではなく、設計の意図を捉え、その意図への偶発的な違反を特定する際にコンパイラの支援が得られるようにするための補助的な情報にすぎません。

関数型インタフェースは通常、関数、アクション、述語などの抽象的な概念を表します。 関数型インタフェースのドキュメントを作成する際や関数型インタフェース型の変数に言及する際には、「このオブジェクトで表される関数」の代わりに「この関数」を使用するなど、そうした抽象的な概念に直接言及するのが一般的です。 「指定された関数を...に適用する」のように、APIメソッドが関数型インタフェースを受け取ったり返したりすることがこの方法で書かれている場合、それは、対応する関数型インタフェースを実装するオブジェクトへの非null参照を意味するものと理解します(ただし、nullの可能性が明示されている場合はそのかぎりではありません)。

このパッケージ内の関数型インタフェースは、次のような拡張可能な命名規則に従います。

  • Function (TからRへの単項関数)、Consumer (Tからvoidへの単項関数)、Predicate (Tからbooleanへの単項関数)、およびSupplier (Rへの無限関数)を含むいくつかの基本的な機能シェイプがあります。
  • 各関数形式には、もっとも一般的な使用方法に基づく自然な引数カウントがあります。 BiFunction(TおよびUからRへの2引数関数)のように、基本形式を引数カウント接頭辞で修飾すれば、異なる引数カウントを示すことができます。
  • (Functionを拡張した)UnaryOperatorや(BiFunctionを拡張した)BinaryOperatorなど、基本関数形式を拡張した追加派生関数が存在しています。
  • 関数型インタフェースの型パラメータをプリミティブに特殊化するには、型接頭辞を追加します。 戻り値と引数がどちらもジェネリックになっている型で、戻り値の型を特殊化するには、ToIntFunctionのように、ToXxxという接頭辞を付けます。 それ以外の場合の型引数の特殊化は、DoubleConsumerObjIntConsumerのように左から右に行われます。 (型接頭辞Objは、ObjIntConsumerのように、そのパラメータは特殊化しないで次のパラメータに移ることを示す場合に使用します。) IntToDoubleFunctionのように、これらのスキームを組み合わせることもできます。
  • すべての引数の特殊化接頭辞が存在している場合、引数カウント接頭辞は省略できます(例: ObjIntConsumer)。

導入されたバージョン:
1.8
関連項目:
  • インタフェース
    クラス
    説明
    2つの入力引数を受け取って結果を返さないオペレーションを表します。
    BiFunction<T,U,R>
    2つの引数を受け取って結果を生成する関数を表します。
    同じ型の2つのオペランドに作用してオペランドと同じ型の結果を生成する演算を表します。
    2つの引数の述語(boolean値関数)を表します。
    boolean値の結果のサプライヤを表します。
    単一の入力引数を受け取って結果を返さないオペレーションを表します。
    2つのdouble値オペランドに作用してdouble値の結果を生成する演算を表します。
    単一のdouble値引数を受け取って結果を返さないオペレーションを表します。
    1つのdouble値引数を受け取って結果を生成する関数を表します。
    1つのdouble値引数の述語(boolean値関数)を表します。
    double値の結果のサプライヤを表します。
    1つのdouble値引数を受け取ってint値の結果を生成する関数を表します。
    1つのdouble値引数を受け取ってlong値の結果を生成する関数を表します。
    単一のdouble値オペランドに作用してdouble値の結果を生成する演算を表します。
    1つの引数を受け取って結果を生成する関数を表します。
    2つのint値オペランドに作用してint値の結果を生成する演算を表します。
    単一のint値引数を受け取って結果を返さないオペレーションを表します。
    1つのint値引数を受け取って結果を生成する関数を表します。
    1つのint値引数の述語(boolean値関数)を表します。
    int値の結果のサプライヤを表します。
    1つのint値引数を受け取ってdouble値の結果を生成する関数を表します。
    1つのint値引数を受け取ってlong値の結果を生成する関数を表します。
    単一のint値オペランドに作用してint値の結果を生成する演算を表します。
    2つのlong値オペランドに作用してlong値の結果を生成する演算を表します。
    単一のlong値引数を受け取って結果を返さないオペレーションを表します。
    1つのlong値引数を受け取って結果を生成する関数を表します。
    1つのlong値引数の述語(boolean値関数)を表します。
    long値の結果のサプライヤを表します。
    1つのlong値引数を受け取ってdouble値の結果を生成する関数を表します。
    1つのlong値引数を受け取ってint値の結果を生成する関数を表します。
    単一のlong値オペランドに作用してlong値の結果を生成する演算を表します。
    オブジェクト値とdouble値の引数を受け取って結果を返さないオペレーションを表します。
    オブジェクト値とint値の引数を受け取って結果を返さないオペレーションを表します。
    オブジェクト値とlong値の引数を受け取って結果を返さないオペレーションを表します。
    1つの引数の述語(boolean値関数)を表します。
    結果のサプライヤを表します。
    2つの引数を受け取ってdouble値の結果を生成する関数を表します。
    double値の結果を生成する関数を表します。
    2つの引数を受け取ってint値の結果を生成する関数を表します。
    int値の結果を生成する関数を表します。
    2つの引数を受け取ってlong値の結果を生成する関数を表します。
    long値の結果を生成する関数を表します。
    単一のオペランドに作用してオペランドと同じ型の結果を生成する演算を表します。