Java函数式接口是仅含一个抽象方法的接口,用于支持Lambda表达式和方法引用;JDK 8起在java.util.function包中提供Function、Consumer、Supplier、Predicate等核心接口及其基本类型特化版、Bi-前缀双参数版、UnaryOperator、BinaryOperator等。
Java 的函数式接口(Functional Interface)是指**只包含一个抽象方法**的接口,主要用于支持 Lambda 表达式和方法引用。JDK 8 起在 java.util.function 包中提供了大量内置的函数式接口,覆盖常见场景。以下是核心且最常用的几类:
基础函数型接口
用于接收参数并返回结果,是最常用的一类:
-
Function
:接收一个 T 类型参数,返回 R 类型结果(如 t -> t.)
toString()
-
Consumer
:接收一个 T 类型参数,不返回结果(常用于“消费”操作,如 System.out::println) -
Supplier
:不接收参数,返回一个 T 类型结果(如 () -> new ArrayList()) -
Predicate
:接收一个 T 类型参数,返回 boolean(用于条件判断,如 s -> s.length() > 0)
带基本类型特化的接口(避免装箱)
为 int、long、double 等基本类型提供专用接口,提升性能,避免自动装箱开销:
-
IntFunction
、LongFunction 、DoubleFunction - IntConsumer、LongConsumer、DoubleConsumer
- IntSupplier、LongSupplier、DoubleSupplier
- IntPredicate、LongPredicate、DoublePredicate
双参数函数接口
用于需要两个输入参数的场景:
-
BiFunction
:接收 T 和 U,返回 R(如 (s, len) -> s.substring(0, len)) -
BiConsumer
:接收两个参数,无返回(如 (k, v) -> map.put(k, v)) -
BiPredicate
:接收两个参数,返回 boolean(如 (x, y) -> x.equals(y))
其他实用接口
补充一些特定用途的接口:
-
UnaryOperator
:等价于 Function,输入输出同类型(如s -> s.trim()) -
BinaryOperator
:等价于 BiFunction,两个同类型输入,返回同类型(如Integer::sum) -
Runnable 和 Comparable 也是函数式接口(虽不在
function包中),但因历史原因被广泛用于 Lambda(如() -> System.out.println("ok"))
基本上就这些。实际开发中,Function、Consumer、Predicate、Supplier 及其基本类型变体用得最多,其余按需选用即可。









