如何使用Java Optional优化对象属性赋值代码,替代手动非空判断
Optional 代码优化方案
以下优化写法完全对齐你原有逻辑,无手动空值判断,符合Optional函数式编程规范:
Java 8 全兼容通用写法
public Optional<Score> calculate(){ return getScore().map(score -> { score.setScore(13D); score.setPercentage(15D); return score; }); }
Java 9+ 更简洁写法
Java 9 为Optional新增了peek方法,专门用于对存在的元素执行副作用操作(修改属性、打印日志等),无需手动返回元素:
public Optional<Score> calculate(){ return getScore().peek(score -> { score.setScore(13D); score.setPercentage(15D); }); }
逻辑说明
- 空值判断完全由Optional内置实现:如果
getScore()返回空Optional,map/peek会直接跳过执行逻辑,返回空Optional,和你原有代码的分支逻辑完全等价 - 无需手动调用
get()取实例,避免了不规范调用可能触发的NoSuchElementException - 无冗余临时变量和分支判断,符合函数式编程风格
- 如果不需要修改原有Score实例,只需要在lambda内新建Score对象,拷贝属性后赋值新值返回即可,外层逻辑无需调整
内容的提问来源于stack exchange,提问作者MUKUL JHA
相关产品推荐
相关产品推荐

