java - 可选与 if/else-if 性能 java 8
问题描述
您好,我有两个代码示例
if/else if/else 语句
private Object getObj(message) {
if (message.getA() != null)
return message.getA();
else if (message.getB() != null)
return message.getB();
else if (message.getC() != null)
return message.getC();
else return null;
}
可选语句
private Optional<Object> wrap(Object o){
return Optional.ofNullable(o);
}
private Object getObj(message) {
return wrap(message.getA())
.orElseGet(() -> wrap(message.getB())
.orElseGet(() -> wrap(message.getC())
.orElse(null)));
}
所以我的问题是这两者在性能方面的比较(我在实际代码中有大约 15-20 个 if-else 语句)?
是否值得重构代码的可读性与性能,或者是对选项的滥用?
如果 if/else-if 语句增加到 100+,性能损失是多少?
提前致谢
解决方案
不要将Optional
s 用于条件逻辑。
它们被设计为从方法返回以指示可能不存在的值。
仅仅因为你可以很好地将它们链接成一行并不意味着它是可以理解的。此外,您实际上一无所获。性能开销可能很大。在最坏的情况下N
,对象被创建然后被丢弃。留在你的“正常”if-else
链条上。
与其想办法让当前代码更具可读性,不如退后一步,问问自己为什么需要 15-20 个 if-else 语句。你能分解一些逻辑吗?为什么首先需要一个 getter 来处理这么多可能具有不同类型的不同字段?等等
推荐阅读
- c++ - C++中犰狳矩阵维度的动态参数化
- python - 使用 Python 3.6.8 解析深度(多个)嵌套的 JSON 块
- python - 损失函数神经网络二元分类平均标签
- homebrew - Htop 立即关闭 Apple Silicon (MacBook Air M1)
- shell - shell 处理和比较数组元素
- python-3.x - 如何在不实际写入队列的情况下测试写入队列
- google-analytics - 如何为支付推荐网站设置谷歌分析/谷歌标签管理器
- python - 尽管没有更改,JSON Web 令牌不再具有“解码”属性
- python - 如何在 Pyspark Dataframe 的特定索引中添加行或替换?
- javascript - 身份服务器:在 Angular 中登录和注销后重定向?