staticメソッドやデフォルトメソッドの数にかかわらず、定義されている抽象メソッドが一つだけのインターフェースを関数型インターフェースという。

主な関数型インターフェース

インターフェース名 宣言されている抽象メソッド
Function<T,R> R apply(T t)
Consumer<T> void accept(T t)
Predicate<T> boolean test(T t)
Supplier<T> T get()
UnaryOperator<T> T apply(T t)

引数が2つの場合はインターフェース名の冒頭にBiがつく。

上記のインターフェースは、それぞれint型専用のものも用意されている。

インターフェース名 宣言されている抽象メソッド
IntFunction<R> R apply(int value)
IntConsumer void accept(int value)
IntPredicate boolean test(int value)
IntSupplier int getAsInt()
IntUnaryOperator int applyAsInt(int operand)
IntBiUnaryOperator int applyAsInt(int left, int right)

同様に、doublelongの場合のインターフェースも存在する。

既存の関数型インターフェースの利用

import java.util.function.*;

String str = new Function<String String>() {
		public String apply(String str) {
				return "Hello " + str;
		}
}.apply("world");

独自の関数型インターフェースの定義

次の要件を満たしていれば、関数型インターフェースとして扱われる。