You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确判断Optional流中是否存在未包含值的元素?

解决Optional流的空值判断需求

别纠结啦,你完全可以在Stream.of()创建的流中使用Optional的实例方法来实现需求,之前的误解完全没必要~ 先上正确代码:

return Stream.of(a.getBestArrivalTime(), a.getBestDepartureTime(), a.getScheduledArrivalTime(), a.getScheduledDepartureTime())
    .anyMatch(opt -> !opt.isPresent());

// 如果你用的是Java 11及以上版本,还能简化成更直观的写法:
// return Stream.of(...)
//     .anyMatch(Optional::isEmpty);

原代码的问题出在哪?

你之前用Objects::isNull是在检查Optional对象本身是否为null,但你的真实需求是判断Optional内部是否没有值。举个例子:如果某个字段返回的是Optional.empty(),这个Optional对象本身并不是null,所以Objects::isNull会返回false,根本检测不到空的Optional,逻辑自然就错了。

关于你对Stream.of()的误解

你误以为Stream.of()是静态方法就不能用Optional::isPresent?这真的是个小误区~ Stream.of()只是用来把多个Optional元素打包成流的工具,流中的每个元素都是Optional的实例,当然可以调用它的isPresent()实例方法——流的创建方式和元素的方法调用完全不冲突。

给你个简单的验证例子:

Optional<String> filledOpt = Optional.of("test");
Optional<String> emptyOpt = Optional.empty();
boolean hasEmptyOptional = Stream.of(filledOpt, emptyOpt).anyMatch(opt -> !opt.isPresent());
// 这里hasEmptyOptional的值是true,完全符合你的预期

这样就能准确判断流中是否存在任意一个未包含值的Optional元素了。

内容的提问来源于stack exchange,提问作者pqa1222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:43:12