复习Java函数式接口关键在于理解其“单一抽象方法”本质及四大核心接口(Supplier、Consumer、Function、Predicate)的语义差异与组合用法,并通过Lambda绑定、Stream/Optional实战深化应用认知。

复习 Java 函数式接口,关键不是死记接口名和方法签名,而是理清“为什么需要它”“它在哪儿用”“怎么组合用”。下面从四个实用角度帮你高效梳理。
紧扣“只有一个抽象方法”这个铁律
所有函数式接口的底层约束就这一条:接口里只能有一个未实现的抽象方法(默认方法、静态方法、重写 Object 的方法都不算)。复习时直接打开 JDK 源码看 @FunctionalInterface 标注的接口,比如 Runnable、Predicate、Function,逐个确认它们是否真只含一个抽象方法。自己写个接口加 @FunctionalInterface,故意多加一个抽象方法,编译报错——这个动作比背十遍定义都管用。
四大核心接口必须会画表对比
不用硬背,但得能随时写出它们的典型用法和语义差异:
-
Supplier
:无参,只返回值。适合延迟创建、生成默认值,比如 () -> new ArrayList()或Math::random -
Consumer
:有参,不返回。适合副作用操作,比如 System.out::println、集合遍历时修改元素 -
Function
:有参,有返回。专注数据转换,比如 String::length、Integer::toString,重点练andThen和compose链式调用 -
Predicate
:有参,返回 boolean。用于过滤判断,重点练 and、or、negate组合复杂条件,比如s -> !s.isEmpty() && s.length() > 5可拆成多个Predicate拼接
把 Lambda 和接口绑定着练,别分开学
Lambda 不是独立语法,它是函数式接口的实例化方式。复习时每写一个 Lambda,立刻反问:它实现了哪个接口?类型是什么?例如:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
s -> s.startsWith("A")→ 类型是Predicate -
list::add→ 类型是Consumer(假设 list 是List) -
Integer::parseInt→ 类型是Function
动手改写一段传统匿名内部类代码为 Lambda,并标注出接口类型,这个过程能快速打通概念断点。
结合 Stream 和 Optional 看真实场景
函数式接口不是玩具,它活在 Stream.filter()、map()、forEach()、Optional.ifPresent() 这些地方。复习时挑一个业务片段,比如“从用户列表中筛选活跃且年龄大于18的用户,并转成用户名集合”,然后逐行标注每个参数位置对应哪个函数式接口,再替换为方法引用或 Lambda。你会发现:接口名不重要,重要的是“这里要传一个能做判断的东西”“这里要传一个能转换东西的东西”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










