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

如何优雅重构Optional判空逻辑?空值执行操作,非空获取对象

重构方案

当然可以重构这段代码,利用Optional的链式调用特性,让代码更简洁紧凑,同时保持可读性:

方案一:链式调用+lambda内处理业务逻辑

return productVersionMongoService.findById(crmProductId)
        .map(ProductVersion::getProductId)
        .flatMap(productMongoService::findById)
        .map(product -> {
            // 这里编写拿到product后的业务逻辑,最终返回需要的Set结果
            // 示例:return buildResultSet(product);
        })
        .orElseGet(() -> {
            log.warn("未找到对应产品,crmProductId: {}", crmProductId);
            return Collections.emptySet();
        });

方案二:抽离业务逻辑为单独方法(更适合复杂业务)

如果后续业务逻辑代码较多,建议把逻辑抽成独立方法,让代码结构更清晰:

// 抽离的业务方法
private Set<YourResultType> processProductBusiness(Product product) {
    // 实现具体业务逻辑,返回最终需要的Set
}

// 主流程代码
return productVersionMongoService.findById(crmProductId)
        .map(ProductVersion::getProductId)
        .flatMap(productMongoService::findById)
        .map(this::processProductBusiness)
        .orElseGet(() -> {
            log.warn("未找到对应产品,crmProductId: {}", crmProductId);
            return Collections.emptySet();
        });

重构优势

  • 去掉了冗余的if-else判断和单独的product变量声明,代码更紧凑
  • 保持Optional的链式调用风格,符合Java 8+函数式编程的设计思路
  • 空值处理(日志+返回空集合)与非空业务逻辑清晰分离,可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:23:11