最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java 中 Lambda 表达式如何处理数据流的空值检测
时间:2026-07-09 10:06:51 编辑:袖梨 来源:一聚教程网
Java中Lambda表达式需结合Stream、Optional等实现空值处理:filter用Objects::nonNull剔除null;map链式调用配合Optional避免NPE;Comparator.nullsLast/First安全排序;Predicate封装非空校验逻辑复用。
Java 中 Lambda 表达式本身不直接“检测空值”,而是配合 Stream API、Optional 或函数式接口(如 Predicate、Function)来实现空值判断与处理。关键不是写个 lambda 就完事,而是把它用在合适的位置——比如 filter 筛空、map 转换前防护、orElse 提供兜底。
用 filter 去掉 null 元素
这是最常见场景:从集合中剔除 null 值。
- 直接用
item != null判断,简单明确:list.stream().filter(x -> x != null).collect(Collectors.toList()) - 更推荐用
Objects::nonNull,语义清晰且避免手误:list.stream().filter(Objects::nonNull).collect(Collectors.toList()) - 注意:它只过滤
null,不处理空字符串("")或空白字符串("tn"),后者需额外加!s.isEmpty()或!s.isBlank()(Java 11+)
用 map + Optional 防止链式调用崩掉
当要取嵌套对象字段(如 user.getAddress().getCity()),直接调用可能 NPE;用 Optional + lambda 可安全穿透:
-
Optional.ofNullable(user)包装源头对象 -
.map(User::getAddress).map(Address::getCity)每步都自动跳过 null -
.orElse("未知城市")统一兜底,不用层层 if - 等价于传统写法的多层 null 判断,但更简洁、可读性高
用 Comparator.nullsLast 处理排序时的 null
对含 null 的集合排序,不能靠手动 if-else 写比较逻辑,容易出错。
立即学习“Java免费学习笔记(深入)”;
- 升序且 null 排末尾:
Comparator.nullsLast(Comparator.naturalOrder()) - 降序且 null 排开头:
Comparator.nullsFirst(Comparator.reverseOrder()) - 字符串排序示例:
list.sort(Comparator.nullsLast(String::compareTo)) - 比手写三元判断更可靠,也支持链式组合(如先按 name 排,name 相同再按 age)
用 Predicate 统一封装空值校验逻辑
如果多个地方都要判断“非空且非空字符串”,可提取为复用的 Predicate:
Predicate<string> nonBlank = s -> s != null && !s.trim().isEmpty();</string>- 之后在 filter 或 if 中直接用:
stream().filter(nonBlank)或if (nonBlank.test(input)) { ... } - 避免重复写
s != null && !s.isEmpty(),也防止漏掉 null 判断导致 NPE - 搭配方法引用更干净,比如
Objects::nonNull本身就是标准 Predicate
相关文章
- 《Disney Lorcana: Wilds Unknown》预购开启 首批《Toy Story》及皮克斯卡牌购买指南 07-29
- 车来了赶车闹钟如何设置 07-29
- 崩坏星穹铁道余晖残卷巨剑守护打法攻略 07-29
- 崩坏星穹铁道砂金角色部分背景介绍 07-29
- 崩坏3雷电芽衣什么时候上线 07-29
- 玩具熊的五夜后宫4代噩梦气球男孩Nightmare Balloon Boy介绍 07-29