Java Lambda 表达式详解(语法 + 实战 + 函数式接口)
·
一句话核心答案:Lambda 表达式是 Java8 的核心新特性,本质是简化匿名内部类的语法糖,专门用于简化函数式接口的写法,让代码更简洁优雅,核心格式:(参数) -> { 执行代码 } 🚀。
1. 什么是 Lambda 表达式?
Lambda 表达式是函数式编程的体现,专门用来简化匿名内部类代码。它没有类、没有方法名,直接关注参数和执行逻辑,大幅减少冗余代码。
核心作用
- 简化匿名内部类,去掉冗余语法
- 代码更简洁、可读性更强
- 配合集合、线程、Stream 流高效开发
- 是 Java 开发必会的新特性
2. Lambda 使用前提
必须满足:函数式接口
- 接口中只有一个抽象方法
- 可以用
@FunctionalInterface注解标记
3. 标准语法格式
(参数类型 参数名) -> { 执行代码; return 返回值; }
极简口诀
- 小括号:参数
- 箭头:指向执行体
- 大括号:执行代码
4. 逐步简化(从匿名类 → Lambda)
原始写法:匿名内部类(冗余)
// 开启线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程执行");
}
}).start();
Lambda 极简写法
new Thread(() -> System.out.println("线程执行")).start();
关键点
- 去掉接口名、方法名
- 只保留核心逻辑
- 代码量减少 60% 以上
5. 四种常用语法形式
形式 1:无参数、无返回值
() -> System.out.println("执行");
形式 2:单个参数(可省略括号)
s -> System.out.println(s);
形式 3:多个参数、有返回值
(a, b) -> a + b;
形式 4:多行代码(必须加 {} + return)
(a, b) -> {
int sum = a + b;
return sum;
};
6. 实战代码(集合遍历 + 排序)
示例 1:集合遍历
public class TestLambda {
public static void main(String[] args) {
List<String> list = Arrays.asList("Java", "Lambda", "开发");
// 传统遍历
for (String s : list) {
System.out.println(s);
}
// Lambda极简遍历
list.forEach(s -> System.out.println(s));
}
}
示例 2:集合排序(最常用)
List<Integer> nums = Arrays.asList(5, 2, 8, 1);
// 传统匿名类
Collections.sort(nums, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
// Lambda一行搞定
Collections.sort(nums, (o1, o2) -> o1 - o2);
关键点
- 无参数:
() - 单个参数:可省略
() - 单行执行体:可省略
{} - 有返回值且单行:可省略
return
7. Lambda 核心特性表
| 特性 | 说明 |
|---|---|
| 本质 | 匿名内部类语法糖 |
| 前提 | 函数式接口(1 个抽象方法) |
| 核心符号 | -> |
| 简化目标 | Runnable、Comparator、自定义接口 |
| 配合技术 | Stream 流、线程、集合 |
| 代码优势 | 简洁、优雅、高效 |
8. 常用函数式接口(Java 内置)
Runnable:无参无返回Consumer<T>:有参无返回(消费)Supplier<T>:无参有返回(生产)Function<T,R>:有参有返回(转换)Predicate<T>:判断返回 boolean
这些接口全部支持 Lambda。
9. 总结
| 特点 | Lambda 表达式 |
|---|---|
| 核心语法 | (参数) -> 执行体 |
| 适用场景 | 函数式接口实现 |
| 最大优势 | 简化代码、去掉冗余 |
| 必备前提 | 只有一个抽象方法的接口 |
| 开发场景 | 线程、集合、Stream、回调 |
✅ 什么时候用 Lambda
- 写匿名内部类时
- 使用函数式接口时
- 集合遍历、排序、线程创建
- Stream 流式编程
❌ 不能使用场景
- 接口有多个抽象方法
- 需要访问多个外部变量
- 代码逻辑非常复杂
🌟最终结论Lambda = 简化函数式接口的语法糖,是 Java8 最实用的特性,核心就是去掉冗余、保留逻辑,学会它能让你的代码瞬间变优雅,是企业开发必备技能 🚀
更多推荐



所有评论(0)