首页 > 解决方案 > 可选与 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+,性能损失是多少?

提前致谢

标签: javaperformanceif-statementjava-8optional

解决方案


不要将Optionals 用于条件逻辑。

它们被设计为从方法返回以指示可能不存在的值

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


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


推荐阅读