Predicate是判断型接口,接收一个参数返回boolean,用于过滤校验;Function是转换型接口,输入T输出R,支持andThen/compose链式操作;Consumer是执行型接口,接收参数无返回值,用于打印存库等副作用操作;Supplier是供给型接口,无参返回T,适用于延迟初始化和工厂场景。

断言型接口 Predicate:做判断的“守门人”
它只干一件事:接收一个参数,返回 boolean 结果,用来表达“是否满足某个条件”。常用于过滤、校验、筛选等场景。
比如用 Predicate<String> 判断字符串是否非空且长度大于5:
Predicate<String> valid = s -> s != null && s.length() > 5;valid.test("hello world"); // truevalid.test("hi"); // false
配合 Stream.filter() 使用最自然,是逻辑分流的关键组件。
函数型接口 Function:做转换的“翻译官”
它负责把一种类型的数据,按规则变成另一种类型——输入一个 T,输出一个 R。核心方法是 apply(T)。
典型用途包括字符串处理、对象字段提取、数值计算映射等:
Function<Integer, String> intToStr = i -> "num_" + i;intToStr.apply(42); // "num_42"-
Function<Person, String> getName = Person::getName;(方法引用写法)
还支持链式操作:andThen() 和 compose(),可组合多个转换逻辑。
消费型接口 Consumer:做执行的“执行者”
它接收一个参数,不返回任何结果(void),专注“做了什么”,比如打印、存库、发消息、修改状态。
Consumer<String> printer = s -> System.out.println("→ " + s);printer.accept("log message"); // 控制台输出 → log message- 常与
Stream.forEach()搭配,完成终端动作。
注意它不产生新数据,只触发副作用;若需链式消费,可用 andThen() 组合多个 Consumer。
供给型接口 Supplier:做产出的“生成器”
它不接收参数,只负责“凭空造出一个 T 类型的值”,对应方法是 get()。适合封装无参创建逻辑。
Supplier<LocalDateTime> now = () -> LocalDateTime.now();Supplier<Random> randGen = Random::new;- 常用于延迟初始化、工厂模式简化、测试数据生成等场景。
和 Consumer 正好相反:一个只进不出,一个只出不进。

















