Lambda表达式核心考点有三:一是语法必须规范,无参写()、单参可省括号、多参必带括号,单行自动返回、多行需{}和return;二是仅适用于有且仅一个抽象方法的函数式接口,须严格匹配参数与返回值,熟记Runnable、Consumer、Predicate、Function、Supplier五大内置接口;三是高频应用场景包括集合排序、Stream过滤、线程创建及方法引用,同时需注意effectively final变量、异常限制和空指针防护。

Java Lambda 表达式考点精析,核心就看三块:语法写法、函数式接口匹配、实际场景应用。不绕弯子,直接说重点。
一、Lambda 语法怎么写才对
写错多半卡在括号、箭头、大括号和 return 这几个地方。记住这几点:
- 无参数必须写 (),不能省,比如
() -> System.out.println("ok") - 单参数可省括号,
s -> s.length()合法;但写成(s) -> s.length()也合法,只是多此一举 - 多参数必须带括号,
(a, b) -> a + b,类型通常省略(靠上下文推断) - 单行表达式自动返回,不用 return,也不用大括号;多行必须加 {} 和 return(有返回值时)
二、为什么只能用在函数式接口上
Lambda 不是万能的,它本质是函数式接口的“快捷实现”。关键点:
- 接口里只能有一个抽象方法(@FunctionalInterface 是提醒,不是强制条件)
- 常见内置接口要熟: Runnable(无参无返)、Consumer<T>(消费)、Predicate<T>(判断)、Function<T,R>(转换)、Supplier<T>(供给)
- 写 Lambda 前,先确认目标接口的方法签名——参数个数、类型、返回值,必须严格匹配
三、考试和面试最爱考的实战场景
光背语法没用,得知道在哪用、怎么用:
立即学习“Java免费学习笔记(深入)”;
-
集合排序:替代
Comparator匿名类,Collections.sort(list, (a,b) -> a.length() - b.length()) -
集合过滤:配合
Stream.filter()+Predicate,如list.stream().filter(s -> s.startsWith("a")) -
线程启动:简化
new Thread(() -> {...}),突出行为本身 -
方法引用过渡:像
System.out::println其实是 Lambda 的进一步简化,常作为延伸考点
四、容易踩坑的细节
这些地方出错,往往不是不会,而是疏忽:
- 变量捕获:Lambda 中用到的局部变量必须是 effectively final(事实上的 final),改了就编译不过
- 异常处理:如果函数式接口方法没声明抛异常,Lambda 里就不能 throw 检查型异常(如
IOException) - 空指针风险:比如
list.stream().map(s -> s.toUpperCase()).collect(...),若 s 为 null 会 NPE,需提前filter(Objects::nonNull)


















