java基础的面试高频05:Java8 核心高频新特性|Lambda、Stream、Optional 实战 + 面试考点全梳理

Java8 是 Java 里程碑式版本,新增的 Lambda 表达式、Stream 流式 API、Optional 空值处理已经成为日常开发标配,也是后端面试高频考点。面试官不仅会问语法,还经常考察函数式编程思想、流式处理优缺点、如何用 Optional 规避空指针异常。今天从原理、使用场景、面试考点三个维度整理高频知识点。

一、Lambda 表达式:函数式编程语法糖

1. Lambda 作用

简化匿名内部类的代码写法,把函数作为方法参数传递,让代码更简洁优雅,仅适用于函数式接口(只有一个抽象方法的接口,可以用@FunctionalInterface注解标识)。

2. 标准语法

(参数列表) -> {方法体}

几种简写规则:

  1. 参数只有一个,可以省略小括号;

  2. 方法体只有一行代码,可以省略大括号和 return;

面试高频追问:Lambda 和匿名内部类区别

  1. 匿名内部类可以是普通接口、抽象类,Lambda 只能用于函数式接口;

  2. 匿名内部类会生成独立 class 文件,Lambda 不会生成额外 class,通过 invokedynamic 指令实现;

  3. Lambda 没有 this,this 指向外部所在类;匿名内部类 this 指向当前内部类对象;

  4. 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 不仅能简化业务代码,也是面试基础必考点,同时也是学习函数式编程、大数据流式处理的基础。

posted @ 2026-07-01 23:05  桃桃不淘1  阅读(0)  评论(0)    收藏  举报