函数式接口是只含一个抽象方法的接口,专为Lambda表达式和方法引用设计;核心在于理解其存在意义(简化冗余代码)与四大常用接口(Function、Predicate、Consumer、Supplier)的典型用法及组合能力。

直接上手学函数式接口,别绕弯——它本质就是“只带一个抽象方法的接口”,专为 Lambda 表达式和方法引用而生。掌握它不靠死记,而靠理解“为什么需要”和“在哪用得顺”。下面按真实学习节奏拆解。
先搞懂它存在的理由
Java 以前写个线程要这样:
new Thread(new Runnable() {
public void run() {
System.out.println("Hello");
}
}).start();
冗长、嵌套深、重点被淹没。函数式接口让这变成一行:
new Thread(() -> System.out.println("Hello")).start();
关键就两点:
• 接口里只能有一个待实现的方法(比如 Runnable.run())
• 编译器能据此把 Lambda 当作该接口的实例来处理
所以学它的第一步,不是背接口名,而是看到 @FunctionalInterface 就知道:这是个“可被 Lambda 填充的壳”。
从四个核心接口开始练手感
java.util.function 包里有40多个接口,但日常80%场景靠这四个打底:
-
Function
:输入一个 T,输出一个 R —— 适合数据转换,比如 String → Integer -
Predicate
:输入一个 T,输出 boolean —— 适合条件判断,比如 s -> s.length() > 5 -
Consumer
:输入一个 T,不返回值 —— 适合“做点事”,比如 System.out::println -
Supplier
:不输入,只返回一个 T —— 适合延迟创建或生成值,比如 () -> new ArrayList()
每个都配一个简单 Lambda 实例跑通,比看10页文档管用。例如:
Function
int n = len.apply("abc"); // 得到 3
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
动手组合,别只写单行
函数式接口的真正威力在“连起来用”。比如处理字符串流程:
- 先用 Predicate 过滤空串
- 再用 Function 转成大写
- 最后用 Consumer 打印
代码可以这样链起来:
List
list.stream()
.filter(s -> !s.isEmpty())
.map(String::toUpperCase)
.forEach(System.out::println);
这里 filter、map、forEach 的参数类型,背后全是函数式接口。你写的每个 Lambda,都在悄悄实现它们。
进阶:用 andThen / compose 做逻辑拼装
Function 接口自带两个组合方法,是重构 if-else 的利器:
- andThen:先执行自己,再执行另一个函数(顺序执行)
- compose:先执行传入的函数,再执行自己(前置处理)
例如把字符串转整数再转双精度:
Function
Function
Function
Double d = convert.apply("123"); // 123.0
这种写法把转换逻辑拆开又粘回去,测试、复用、替换都更方便。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










