Java Optional删除值后返回,是否有更优实现方式?
优化后的Java Optional用法实现
你的代码存在两次调用religiousOrderRepository.findById(id)的冗余,完全可以通过一次查询完成逻辑,同时更贴合Optional的链式调用风格:
public Optional<ReligiousOrderEntity> deleteReligiousOrderEntity(Long id) { return religiousOrderRepository.findById(id) .flatMap(entity -> { religiousOrderRepository.delete(entity); return Optional.empty(); }); }
优化点说明
- 仅执行一次数据库查询:避免了原代码中不必要的二次
findById调用,提升性能 - 链式调用更简洁:利用
flatMap在查询到实体时执行删除操作,并返回空Optional(对应删除后的状态);若未查询到实体,直接返回空Optional,和原代码逻辑完全一致 - 符合Optional设计意图:通过链式操作替代分支判断,代码更具可读性
另一种更简洁的写法(利用map返回null自动转为空Optional的特性):
public Optional<ReligiousOrderEntity> deleteReligiousOrderEntity(Long id) { return religiousOrderRepository.findById(id) .map(entity -> { religiousOrderRepository.delete(entity); return null; }); }
不过第一种用flatMap的写法更清晰,避免了返回null的隐式转换,可读性更强。
内容的提问来源于stack exchange,提问作者Ernesto Orozco
相关产品推荐
相关产品推荐

