Lambda表达式核心是“能用对、不写错、知其所以然”,须紧扣函数式接口约束、类型推断边界、简化规则、误用场景及与Stream协同逻辑。

Java Lambda 表达式核心考点演练,关键不是死记语法,而是围绕“能用对、不写错、知其所以然”三个层次展开。重点落在函数式接口约束、类型推断边界、常见误用场景和与Stream的协同逻辑上。
紧扣函数式接口这个前提
所有Lambda都必须绑定到有且仅有一个抽象方法的接口(Object方法除外)。考试或面试常设陷阱:给一个含两个抽象方法的接口强行写Lambda,编译直接报错。
- 务必会识别典型内置接口:Runnable(无参无返)、Consumer<T>(有参无返)、Supplier<T>(无参有返)、Predicate<T>(有参返回boolean)、Function<T,R>(有参有返)
- @FunctionalInterface注解不是必须的,但加了能提前发现接口被意外修改(比如多加了一个default方法)
- 自定义接口时,若声明了多个抽象方法,哪怕只用其中一个,也不能用Lambda实现
掌握五条不可绕过的简化规则
这些规则决定你写的Lambda是否合法、是否可读,也是笔试填空/改错高频点:
- 无参数 → 必须写 (),不能省略
- 单个参数 → 括号可省,如 s -> s.length();但显式写类型时括号不能丢,如 (String s) -> s.length()
- 多个参数 → 括号不能省,类型可省,如 (a, b) -> a + b
- 单行表达式 → 大括号、分号、return 全部省略,结果自动返回
- 多行语句 → 必须加大括号,有返回值时必须写 return
盯紧类型推断失效的典型场景
编译器靠上下文猜参数类型,一旦上下文模糊,就会报错。这是实操中最容易栽跟头的地方:
立即学习“Java免费学习笔记(深入)”;
- 单独声明变量但没指定泛型:❌ Consumer c = s -> System.out.println(s);(类型不确定)→ ✅ Consumer<String> c = s -> System.out.println(s);
- 方法重载时传Lambda:如果多个重载方法接受不同函数式接口,编译器可能无法判断该匹配哪一个,需强制转型或改用完整写法
- 泛型方法调用中直接传Lambda:有时需补全类型参数,如 Collections.<String>sort(list, (a,b) -> a.compareTo(b))
结合Stream做真题级实战演练
Lambda几乎不单独出现,90%考法都在Stream链式调用中。练熟这四类组合,基本覆盖全部考点:
- filter + Predicate:筛选,如 list.stream().filter(s -> s.length() > 3)
- map + Function:转换,如 list.stream().map(s -> s.toUpperCase())
- sorted + Comparator:排序,注意升序降序写法差异,如 sorted((a,b) -> b - a) 是降序
- forEach + Consumer:终端消费,注意它不返回Stream,链式在此中断


















