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

如何将含嵌套if else的Java代码改写为Java 8 Optional风格

Java 8 Optional风格改写方案

适配Java 8的最终实现代码

// 第一步:优先查询入参priorityId对应的优先级名称
Optional<String> priorityName = Optional.ofNullable(id.priorityId)
        .flatMap(priorityId -> getPriorityInfoById(siiClient, priorityId))
        .map(this::getNameBySiiPriorityInfo)
        .filter(name -> !name.isEmpty());

// 第一步查询为空时,走客户关联优先级降级查询
if (priorityName.isEmpty()) {
    priorityName = Optional.ofNullable(id.customerId)
            .flatMap(customerId -> getCustomerInfoByCustomerId(siiClient, customerId))
            .filter(siiCustomerInfo -> siiCustomerInfo.getPriorityId() != null)
            .map(SiiCustomerInfo::getPriorityId)
            .flatMap(priorityId -> getPriorityInfoById(siiClient, priorityId))
            .map(this::getNameBySiiPriorityInfo)
            .filter(name -> !name.isEmpty());
}

改写说明

  • 消除了原代码的嵌套if结构,逻辑分层清晰,主逻辑和降级逻辑完全拆分
  • 所有空指针校验都通过Optional.ofNullable、flatMap、filter实现,替代手动!= null、isPresent()判断
  • 如果你的运行环境支持Java 9及以上版本,可以进一步简化为纯链式调用,用Optional.or()方法替代外层的空判断:
Optional<String> priorityName = Optional.ofNullable(id.priorityId)
        .flatMap(priorityId -> getPriorityInfoById(siiClient, priorityId))
        .map(this::getNameBySiiPriorityInfo)
        .filter(name -> !name.isEmpty())
        .or(() -> Optional.ofNullable(id.customerId)
                .flatMap(customerId -> getCustomerInfoByCustomerId(siiClient, customerId))
                .filter(siiCustomerInfo -> siiCustomerInfo.getPriorityId() != null)
                .map(SiiCustomerInfo::getPriorityId)
                .flatMap(priorityId -> getPriorityInfoById(siiClient, priorityId))
                .map(this::getNameBySiiPriorityInfo)
                .filter(name -> !name.isEmpty())
        );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:42:03