解释 Predicate 和 Consumer 函数式接口
Predicate 和 Consumer 是 Java 8java.util.function包中的核心函数式接口,均用于 “函数式编程中的参数传递”,但职责不同:
# 1. Predicate 接口(断言型接口)
核心作用:接收一个参数,返回
boolean值(用于判断条件是否成立);抽象方法:
boolean test(T t);常用场景:数据过滤(如 Stream 的
filter方法)、条件判断;默认方法:提供
and(与)、or(或)、negate(非)等方法,支持条件组合;示例:
// 定义Predicate:判断数字是否为偶数 Predicate<Integer> isEven = num -> num % 2 == 0; // 测试条件 System.out.println(isEven.test(4)); // true System.out.println(isEven.test(5)); // false // 条件组合(偶数且大于10) Predicate<Integer> isGreaterThan10 = num -> num > 10; Predicate<Integer> condition = isEven.and(isGreaterThan10); System.out.println(condition.test(12)); // true1
2
3
4
5
6
7
8
9
10
11
# 2. Consumer 接口(消费型接口)
核心作用:接收一个参数,无返回值(用于 “消费” 数据,如打印、修改属性);
抽象方法:
void accept(T t);常用场景:数据处理(如 Stream 的
forEach方法)、结果输出;默认方法:
andThen(链式调用,先执行当前 Consumer,再执行下一个);示例:
// 定义Consumer:打印数据 Consumer<String> print = s -> System.out.println("输出:" + s); // 消费数据 print.accept("Hello Lambda"); // 输出:输出:Hello Lambda // 链式调用(先打印,再转大写打印) Consumer<String> printUpper = s -> System.out.println("大写输出:" + s.toUpperCase()); print.andThen(printUpper).accept("hello"); // 输出:输出:hello → 大写输出:HELLO1
2
3
4
5
6
7
8
9
10
# 核心区别
- Predicate:有入参、有返回值(boolean),侧重 “判断”;
- Consumer:有入参、无返回值,侧重 “处理”。
上次更新: 12/30/2025