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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:54:04