使用 filter(objects::nonnull) 是最简洁安全的判空过滤方式,适用于基础过滤、映射后过滤,并可结合 optional.flatmap 或 optional.ofnullable 做边界防护。

直接用 filter(Objects::nonNull) 是最简洁、安全、符合规范的做法。它语义清晰、性能好,且能避免空指针异常。
基础过滤:移除集合本身的 null 元素
当 List 或数组本身含 null(如 Arrays.asList("a", null, "b")),只需一步过滤:
- 用
Objects::nonNull替代item != null—— 更具可读性,也统一了判空风格 - 写法示例:
Listclean = list.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
映射后过滤:处理方法返回可能为 null 的场景
常见于 map() 调用外部查找方法(如 findUserById()),结果可能为 null。此时不能把判空塞进 filter 里做副作用逻辑,而应分两步:
- 先
map出候选对象(允许为 null) - 再
filter(Objects::nonNull)剔除无效项 - 推荐写法:
Listusers = ids.stream()
.map(this::findUserById)
.filter(Objects::nonNull)
.collect(Collectors.toList());
升级方案:用 Optional + flatMap 避免显式 null
若你控制被调用方法(如 findUserById),更健壮的方式是让它返回 Optional<user></user>:
- 修改方法签名,用
Optional.ofNullable(...).findFirst()等封装结果 - 主流程改用
flatMap:
Listusers = ids.stream()
.flatMap(id -> findUserById(id).stream())
.collect(Collectors.toList());
——Optional.stream()自动跳过空值,无需额外filter
边界防护:源集合本身可能为 null
如果原始 List 可能为 null(如远程调用返回值),需先兜底:
- 用
Optional.ofNullable(list).orElse(Collections.emptyList())安全转流 - 或 Java 9+ 可结合
Stream.ofNullable(但注意它只接受单个元素,常配合flatMap使用):
list == null ? Stream.empty() : list.stream() 更直白
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











