java - 可选 vs if/else-if 性能 java 8

标签 java performance if-statement java-8 option-type

你好,我有两个代码示例

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用于条件逻辑。

它们的设计,to be returned from a method to indicate a potentially absent value .

仅仅因为您可以很好地将它们链接成一行并不意味着它是可以理解的。而且你实际上一无所获。性能开销可能很大。在最坏的情况下 N 对象被创建然后被丢弃。只需使用您的“正常”if-else 链即可。


与其想方设法让您当前的代码更具可读性,不如退后一步问问自己,为什么您需要 15-20 个 if-else 语句。你能分解一些逻辑吗?为什么首先需要一个 getter 来处理这么多可能具有不同类型的不同字段?等等

关于java - 可选 vs if/else-if 性能 java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235254/

相关文章:

java - 为 eclipse-pmd 配置与 gradle PMD 使用相同的 PMD 规则集 - 哪个规则集用于 net.sourceforge.pmd :pmd-java

javascript - jQuery 动态 DOM 创建性能

javascript - 关于多个 facebook Json 请求的性能建议

performance - 为什么 <columnname> IS NULL 需要这么长时间?

java - 如何在我的 Maven 项目中更改 ejb-jar.xml 的位置?

java - 当我将 recyclerview 版本从 23.0.1 更改为 23.2.1 时,gradle 文件错误

java - Spring Boot 的执行器端点在测试期间可用

javascript - 如何重构这一堆 if 语句?

python - 使用 for 循环获取行数

php - 如何将 if/else if 转换为循环