Java Lambda 表达式是将函数作为值使用的底层能力,需配合唯一抽象方法的函数式接口(如@FunctionalInterface标注),用于简化匿名内部类冗余代码;支持参数和大括号按规则省略,并广泛应用于线程、集合遍历、Stream操作及排序等场景。

Java Lambda 表达式不是“新语法糖”,而是把函数当作值来用的底层能力。它必须配合函数式接口使用,核心目标就一个:去掉匿名内部类里那些重复又无意义的模板代码,只留下你真正想执行的逻辑。
函数式接口是硬性前提
Lambda 不能随便写,必须指向一个且仅有一个抽象方法的接口——这就是函数式接口。编译器靠 @FunctionalInterface 注解帮你检查,一旦接口里多加了一个抽象方法,直接报错。
- 允许有 default 方法、static 方法,不影响函数式接口身份
- 常见内置接口都在 java.util.function 包里:Consumer(消费)、Function(转换)、Predicate(判断)、Supplier(供给)
- 自定义时建议加注解,比如:@FunctionalInterface interface Calculator { int calc(int a, int b); }
参数和大括号怎么省?看这三条规则
简化不是乱省,得按逻辑来。记住三个关键点:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 无参 → 小括号 () 必须保留,不能省
- 单参数 → 括号可省,s -> s.length() 和 (s) -> s.length() 效果一样
- 单行表达式 → 大括号和 return 全部省掉;多行 → 必须加大括号,且 return 不能少
四种典型写法,对应不同场景
不用死记,按实际参数和返回需求选:
立即学习“Java免费学习笔记(深入)”;
- 无参无返回: () -> System.out.println("启动")
- 单参无返回: name -> System.out.println(name)
- 双参有返回: (a, b) -> a * b
- 多行带返回: (x, y) -> { int res = x + y; return res > 100 ? res : 0; }
实战中它最常出现在哪几个地方
不是所有地方都适合用 Lambda,但这几个场景几乎成了标配:
- 线程启动: new Thread(() -> System.out.println("后台任务")).start();
- 集合遍历: list.forEach(s -> System.out.println(s));
- Stream 过滤与映射: numbers.stream().filter(n -> n % 2 == 0).map(x -> x * x).collect(...)
- 排序比较: Collections.sort(list, (s1, s2) -> Integer.compare(s1.length(), s2.length()));

















