lambda表达式是函数式接口的简洁实现方式,本质为编译器自动生成接口实例;需满足sam原则,配合@functionalinterface注解校验,依托java.util.function包预置接口,遵循(参数)->{逻辑}语法,并深度集成stream api实现声明式编程。

Java 8 引入的 Lambda 表达式,本质是函数式接口的简洁实现方式——它不新增语法结构,而是让编译器帮你把一段可执行逻辑“自动包装”成接口实例。关键不在写得多炫,而在选对接口、写得够简、用得自然。
找准函数式接口:不是所有接口都能用 Lambda
只有且仅有一个抽象方法(SAM)的接口才是函数式接口,比如 Runnable、Comparator、Function、Predicate、Consumer 等。Java 自带 @FunctionalInterface 注解来明确标识和校验。
- 自己定义时加上该注解,编译器会报错提醒你别误加第二个抽象方法
- 别试图对
List或ArrayList这类普通类用 Lambda——它们不是接口,更不是函数式接口 - JDK 的
java.util.function包里已预置 40+ 常用函数式接口,优先复用,少造轮子
Lambda 写法三要素:参数 → 箭头 → 逻辑体
格式为 (参数列表) -> { 方法体 },括号、花括号、分号都可按需省略:
- 无参:
() -> System.out.println("hello") - 单参且类型可推断:
s -> s.length() > 0(代替(String s) -> s.length() > 0) - 单表达式体:去掉花括号和
return,如x -> x * x - 多语句必须加花括号和分号,且显式
return(如有返回值)
替代匿名内部类:一行顶十行
以前写线程要这样:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("running");
}
});
现在直接写:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
new Thread(() -> System.out.println("running")).start();
集合排序也更直白:
- 旧写法:
list.sort(new Comparator<string>() { public int compare(String a, String b) { return b.compareTo(a); } });</string> - Lambda:
list.sort((a, b) -> b.compareTo(a)); - 甚至进一步简化为方法引用:
list.sort(Comparator.reverseOrder());或list.sort(String::compareTo)
结合 Stream API 发挥最大威力
Lambda 在 Stream 中不是点缀,而是核心驱动。过滤、映射、归约等操作天然适配函数式风格:
list.stream().filter(s -> s != null && !s.trim().isEmpty()).map(String::toUpperCase).sorted().collect(Collectors.toList())- 把原本需要循环 + if + new list 的过程,压缩成声明式链式调用
- 注意:Stream 操作是惰性的,
collect、forEach、count这类终端操作才会真正触发执行
不复杂但容易忽略:Lambda 本质是语法糖,背后仍是对象实例;它能访问所在作用域的 有效 final 变量(Java 8 起放宽为“实际 final”,即定义后未再赋值即可),但不能修改局部变量本身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










