Java Function链式调用中如何给getResults返回的List<Result>加非空校验过滤
解决方案
Java 标准的 Function 接口没有内置 filter 类的中间操作,你可以在 getResults 之后插入一个映射步骤,借助 Optional 完成 null 和空集合的校验,完全规避空指针风险。
修改后的代码如下:
public MyFunc(Helper helper) { Function<String, HttpEntity<Request>> createRequestFunction = helper::createRequest; this.fetch = createRequestFunction .andThen(helper::getResponse) .andThen(Response::getQuery) .andThen(QueryResult::getResults) // 新增校验逻辑 .andThen(results -> Optional.ofNullable(results) .filter(CollectionUtils::isNotEmpty) .orElse(Collections.emptyList())) .andThen(results -> results.stream() .map(Result::getKey) .filter(StringUtils::isNotBlank) .map(s -> s.split("\\|")) .filter(data -> data.length == 2) .map(data -> data[1]) .collect(Collectors.toList())); }
新增的校验逻辑说明:
- 先用
Optional.ofNullable()包裹getResults的返回值,处理返回 null 的场景 - 调用
filter(CollectionUtils::isNotEmpty)完成空集合校验,只有集合非空时才会保留原集合 - 如果是 null 或者空集合,统一返回空
List,后续的流操作即使执行也只会返回空集合,不会抛出空指针异常
如果你的业务逻辑要求结果集合为空时需要抛出异常终止流程,可以把 orElse(Collections.emptyList()) 替换为 orElseThrow(() -> new 自定义业务异常("结果集合为空")) 即可。
内容的提问来源于stack exchange,提问作者karvai
相关产品推荐
相关产品推荐

