java基础的面试高频05:Java8 核心高频新特性|Lambda、Stream、Optional 实战 + 面试考点全梳理
Java8 是 Java 里程碑式版本,新增的 Lambda 表达式、Stream 流式 API、Optional 空值处理已经成为日常开发标配,也是后端面试高频考点。面试官不仅会问语法,还经常考察函数式编程思想、流式处理优缺点、如何用 Optional 规避空指针异常。今天从原理、使用场景、面试考点三个维度整理高频知识点。
一、Lambda 表达式:函数式编程语法糖
1. Lambda 作用
简化匿名内部类的代码写法,把函数作为方法参数传递,让代码更简洁优雅,仅适用于函数式接口(只有一个抽象方法的接口,可以用@FunctionalInterface注解标识)。
2. 标准语法
(参数列表) -> {方法体}
几种简写规则:
-
参数只有一个,可以省略小括号;
-
方法体只有一行代码,可以省略大括号和 return;
面试高频追问:Lambda 和匿名内部类区别
-
匿名内部类可以是普通接口、抽象类,Lambda 只能用于函数式接口;
-
匿名内部类会生成独立 class 文件,Lambda 不会生成额外 class,通过 invokedynamic 指令实现;
-
Lambda 没有 this,this 指向外部所在类;匿名内部类 this 指向当前内部类对象;
-
Lambda 访问局部变量,变量默认被 final 修饰,不能二次赋值。
二、Stream API:集合流式处理
Stream 用来对集合、数组做复杂的数据遍历、过滤、排序、聚合、转换操作,链式调用告别多层 for 循环嵌套,代码可读性大幅提升。
1. Stream 两类操作
-
中间操作(懒加载):filter、map、sorted、distinct、limit 等,返回新 Stream,不会立即执行;
-
终止操作:collect、forEach、count、max、min 等,触发流式计算,一个流只能执行一次终止操作。
2. 高频开发场景
-
集合过滤筛选:filter 过滤符合条件的数据;
-
类型转换:map 将对象转换成指定字段;
-
去重、排序、分页;
-
集合分组、统计聚合(Collectors.groupingBy)。
面试坑点
Stream 流只能消费一次,执行完终止操作后流会关闭,再次调用中间操作会抛出异常;并行流parallelStream利用多线程提升大数据量处理效率,注意线程安全问题。
三、Optional:优雅解决空指针异常
1. 诞生背景
NPE 空指针异常是 Java 最常见线上 bug,大量 if (null != obj) 嵌套代码可读性极差,Java8 提供 Optional 容器类,优雅处理空值场景。
2. 常用核心方法
-
Optional.ofNullable(T t):最常用,支持空和非空对象封装;
-
orElse(T other):为空返回默认值;
-
orElseGet(Supplier):为空执行函数获取默认值;
-
map():安全获取对象属性,多层属性无需层层判空;
-
ifPresent():非空才执行消费逻辑。
最佳实践
禁止使用Optional.get()直接获取元素,不做判断会依旧抛出空指针;优先使用orElse、map做安全取值。
四、Java8 新特性面试总结
-
Lambda 本质是函数式接口的语法糖,核心是行为参数化;
-
Stream 流式处理基于懒加载,适合集合复杂数据处理,不适合 IO 操作;
-
Optional 用来规避空指针,告别多层 if 空判断,提升代码健壮性;
-
常用函数式接口:Consumer 消费型、Supplier 供给型、Predicate 断言型、Function 函数型。
Java8 新特性已经是企业开发硬性要求,熟练使用 Lambda+Stream+Optional 不仅能简化业务代码,也是面试基础必考点,同时也是学习函数式编程、大数据流式处理的基础。

浙公网安备 33010602011771号