モジュール java.base
パッケージ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
という接頭辞を付けます。 それ以外の場合の型引数の特殊化は、DoubleConsumer
やObjIntConsumer
のように左から右に行われます。 (型接頭辞Obj
は、ObjIntConsumer
のように、そのパラメータは特殊化しないで次のパラメータに移ることを示す場合に使用します。)IntToDoubleFunction
のように、これらのスキームを組み合わせることもできます。 - すべての引数の特殊化接頭辞が存在している場合、引数カウント接頭辞は省略できます(例:
ObjIntConsumer
)。
- 導入されたバージョン:
- 1.8
- 関連項目:
FunctionalInterface
-
インタフェースのサマリー インタフェース 説明 BiConsumer<T,U> 2つの入力引数を受け取って結果を返さないオペレーションを表します。BiFunction<T,U,R> 2つの引数を受け取って結果を生成する関数を表します。BinaryOperator<T> 同じ型の2つのオペランドに作用してオペランドと同じ型の結果を生成する演算を表します。BiPredicate<T,U> 2つの引数の述語(boolean値関数)を表します。BooleanSupplier boolean
値の結果のサプライヤを表します。Consumer<T> 単一の入力引数を受け取って結果を返さないオペレーションを表します。DoubleBinaryOperator 2つのdouble
値オペランドに作用してdouble
値の結果を生成する演算を表します。DoubleConsumer 単一のdouble
値引数を受け取って結果を返さないオペレーションを表します。DoubleFunction<R> 1つのdouble値引数を受け取って結果を生成する関数を表します。DoublePredicate 1つのdouble
値引数の述語(boolean値関数)を表します。DoubleSupplier double
値の結果のサプライヤを表します。DoubleToIntFunction 1つのdouble値引数を受け取ってint値の結果を生成する関数を表します。DoubleToLongFunction 1つのdouble値引数を受け取ってlong値の結果を生成する関数を表します。DoubleUnaryOperator 単一のdouble
値オペランドに作用してdouble
値の結果を生成する演算を表します。Function<T,R> 1つの引数を受け取って結果を生成する関数を表します。IntBinaryOperator 2つのint
値オペランドに作用してint
値の結果を生成する演算を表します。IntConsumer 単一のint
値引数を受け取って結果を返さないオペレーションを表します。IntFunction<R> 1つのint値引数を受け取って結果を生成する関数を表します。IntPredicate 1つのint
値引数の述語(boolean値関数)を表します。IntSupplier int
値の結果のサプライヤを表します。IntToDoubleFunction 1つのint値引数を受け取ってdouble値の結果を生成する関数を表します。IntToLongFunction 1つのint値引数を受け取ってlong値の結果を生成する関数を表します。IntUnaryOperator 単一のint
値オペランドに作用してint
値の結果を生成する演算を表します。LongBinaryOperator 2つのlong
値オペランドに作用してlong
値の結果を生成する演算を表します。LongConsumer 単一のlong
値引数を受け取って結果を返さないオペレーションを表します。LongFunction<R> 1つのlong値引数を受け取って結果を生成する関数を表します。LongPredicate 1つのlong
値引数の述語(boolean値関数)を表します。LongSupplier long
値の結果のサプライヤを表します。LongToDoubleFunction 1つのlong値引数を受け取ってdouble値の結果を生成する関数を表します。LongToIntFunction 1つのlong値引数を受け取ってint値の結果を生成する関数を表します。LongUnaryOperator 単一のlong
値オペランドに作用してlong
値の結果を生成する演算を表します。ObjDoubleConsumer<T> オブジェクト値とdouble
値の引数を受け取って結果を返さないオペレーションを表します。ObjIntConsumer<T> オブジェクト値とint
値の引数を受け取って結果を返さないオペレーションを表します。ObjLongConsumer<T> オブジェクト値とlong
値の引数を受け取って結果を返さないオペレーションを表します。Predicate<T> 1つの引数の述語(boolean値関数)を表します。Supplier<T> 結果のサプライヤを表します。ToDoubleBiFunction<T,U> 2つの引数を受け取ってdouble値の結果を生成する関数を表します。ToDoubleFunction<T> double値の結果を生成する関数を表します。ToIntBiFunction<T,U> 2つの引数を受け取ってint値の結果を生成する関数を表します。ToIntFunction<T> int値の結果を生成する関数を表します。ToLongBiFunction<T,U> 2つの引数を受け取ってlong値の結果を生成する関数を表します。ToLongFunction<T> long値の結果を生成する関数を表します。UnaryOperator<T> 単一のオペランドに作用してオペランドと同じ型の結果を生成する演算を表します。