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

如何正确使用Optional的isPresent()方法优化班次更新代码?

正确使用Optional简化门店班次更新方法的代码

你的代码因显式调用isPresent()和嵌套分支导致冗余,可利用Optional的链式API重构,让代码更简洁易读:

重构后的代码

public String updateShift(ShiftsDTO shiftsDTO){
    return shiftsRepository.findById(shiftsDTO.getId())
        .map(preUpdateShift -> {
            // 先判断时间冲突,存在则抛出异常
            if (shiftsRepository.existsByShiftStartAndShiftEnd(shiftsDTO.getShiftStart(), shiftsDTO.getShiftEnd())) {
                throw new ShiftAlreadyExistsException("An existing shift already covers this period");
            }
            // 映射DTO数据并保存更新
            shiftsMapper.mapShiftFromDto(shiftsDTO, preUpdateShift);
            shiftsRepository.save(preUpdateShift);
            return "Shift updated successfully";
        })
        // 班次不存在时抛出异常
        .orElseThrow(() -> new ShiftNotFoundException("This shift doesn't exist"));
}

核心优化点

  • 消除冗余判断:用map()替代isPresent()+get()的组合,直接处理Optional存在的对象,避免手动拆箱操作
  • 简化分支逻辑:用orElseThrow()直接处理Optional为空的场景,替代原有的else分支,代码结构更线性流畅
  • 逻辑更直观:将时间冲突判断提前,符合"失败优先"的编码习惯,异常情况先处理,正常更新逻辑后置

补充说明

如果方法不需要返回值,还可以用ifPresentOrElse()处理,但这里因为要返回操作结果字符串,map()+orElseThrow()的组合更适配场景,既完成了存在时的逻辑处理,又能统一返回值或抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:06