Java 8 函数式接口大全:java.util.function 包 43 个核心接口
函数式接口分类体系
Java 8 在 java.util.function 定义 43 个标准函数式接口,覆盖 1/2 参数、引用/原语类型、消费/供给/变换/判断/组合等场景。
核心接口速查表
| 分类 | 接口 | 抽象方法 | 语义 |
|---|---|---|---|
| 消费型 | Consumer | void accept(T t) | 消费单值,无返回 |
| BiConsumer | void accept(T t, U u) | 消费两值 | |
| IntConsumer | void accept(int value) | 消费 int | |
| LongConsumer / DoubleConsumer | ... | 消费 long/double | |
| 供给型 | Supplier | T get() | 供给单值 |
| BooleanSupplier | boolean getAsBoolean() | 供给 boolean | |
| IntSupplier | int getAsInt() | 供给 int | |
| LongSupplier / DoubleSupplier | ... | 供给 long/double | |
| 函数型 | Function | R apply(T t) | 一元变换 |
| BiFunction | R apply(T t, U u) | 二元变换 | |
| UnaryOperator | T apply(T t) | 一元同类型变换 | |
| BinaryOperator | T apply(T t1, T t2) | 二元同类型变换 | |
| 判断型 | Predicate | boolean test(T t) | 一元判断 |
| BiPredicate | boolean test(T t, U u) | 二元判断 | |
| IntPredicate / LongPredicate / DoublePredicate | ... | 原语判断 |
原语特化接口(避免装箱开销)
命名规律:ToIntFunction、IntFunction、IntUnaryOperator、IntBinaryOperator、IntPredicate、IntConsumer、IntSupplier 等,覆盖 int/long/double 双向转换与运算。
组合与默认方法
核心接口提供默认方法支持组合:
Function:andThen、composePredicate:and、or、negateConsumer:andThenComparator:thenComparing、reversed、nullsFirst/Last
Predicate 实战示例
import java.util.*;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String[] args) {
List list = Arrays.asList(1,2,3,4,5,6,7,8,9);
// 1. 全真谓词
System.out.println("Print all:");
eval(list, n -> true);
// 2. 偶数判断
System.out.println("Print even:");
eval(list, n -> n % 2 == 0);
// 3. 组合谓词:大于 3 且为偶数
System.out.println("Print >3 and even:");
eval(list, n -> n > 3 && n % 2 == 0);
// 或使用组合默认方法
eval(list, n -> n > 3); // 需组合写法:Predicate p = n -> n > 3; eval(list, p.and(n -> n%2==0));
}
static void eval(List list, Predicate predicate) {
for (Integer n : list) {
if (predicate.test(n)) System.out.print(n + " ");
}
System.out.println();
}
}
输出:
Print all: 1 2 3 4 5 6 7 8 9
Print even: 2 4 6 8
Print >3 and even: 4 6 8
自定义函数式接口
@FunctionalInterface
interface TriFunction {
R apply(T t, U u, V v);
}
// 使用
TriFunction sum3 = (a,b,c) -> a+b+c;
System.out.println(sum3.apply(1,2,3)); // 6
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 8 函数式接口大全:java.util.function 包 43 个核心接口