Lambda表达式用于简洁替代单抽象方法的函数式接口实现,前提是接口仅含一个抽象方法,语法为(参数)->{方法体},可省略类型、括号、大括号和return;典型应用如Thread和Comparator;不可访问非final局部变量,无独立this,不支持未声明的受检异常。

Java 中 Lambda 表达式的核心作用,就是用更简洁的语法替代只实现一个抽象方法的匿名内部类(即函数式接口的实例),从而让代码更紧凑、可读性更高。
前提:必须是函数式接口
只有**只有一个抽象方法**的接口才能使用 Lambda 表达式。Java 自带的如 Runnable、Comparator、Consumer、Function 等都是函数式接口(有 @FunctionalInterface 注解)。如果不是函数式接口,编译直接报错。
基本语法结构
Lambda 表达式写法为:(参数列表) -> { 方法体 },可进一步简化:
- 参数类型通常可省略(编译器能推断),如
(a, b) -> a + b - 只有一个参数时括号可省,如
a -> a.length() - 方法体只有一条语句且为返回值时,大括号和 return 都可省,如
s -> s.toUpperCase() - 方法体有多条语句,必须加 {} 和 return(如需返回)
典型场景对比:从匿名内部类到 Lambda
示例 1:启动线程
匿名内部类写法:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
@Override
public void run() {
System.out.println("Hello");
}
});
Lambda 写法:
new Thread(() -> System.out.println("Hello"));示例 2:集合排序
匿名内部类写法:
list.sort(new Comparator@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
Lambda 写法:
list.sort((s1, s2) -> s1.length() - s2.length());注意事项与常见误区
- Lambda 不能访问其所在作用域中非 final 或“事实 final”(未被修改)的局部变量
- Lambda 没有自己的 this,它内部的 this 指向的是外部类实例
- 不要试图在 Lambda 中抛出受检异常(Exception),除非函数式接口的方法声明了该异常
- 过度嵌套或逻辑复杂的 Lambda 建议提取成普通方法,保持可读性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










