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 提供兜底。
这是最常见场景:从集合中剔除 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+)当要取嵌套对象字段(如 user.getAddress().getCity()),直接调用可能 NPE;用 Optional + lambda 可安全穿透:
Optional.ofNullable(user) 包装源头对象.map(User::getAddress).map(Address::getCity) 每步都自动跳过 null.orElse("未知城市") 统一兜底,不用层层 if对含 null 的集合排序,不能靠手动 if-else 写比较逻辑,容易出错。
立即学习“Java免费学习笔记(深入)”;
Comparator.nullsLast(Comparator.naturalOrder())
Comparator.nullsFirst(Comparator.reverseOrder())
list.sort(Comparator.nullsLast(String::compareTo))
如果多个地方都要判断“非空且非空字符串”,可提取为复用的 Predicate:
Predicate<string> nonBlank = s -> s != null && !s.trim().isEmpty();</string>stream().filter(nonBlank) 或 if (nonBlank.test(input)) { ... }
s != null && !s.isEmpty(),也防止漏掉 null 判断导致 NPEObjects::nonNull 本身就是标准 Predicate