可选与 if/else-if 性能 java 8 [英] Optional vs if/else-if performance java 8

查看:35
本文介绍了可选与 if/else-if 性能 java 8的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我有两个代码示例

Hello i have two samples of code

if/else if/else 语句

if/else if/else statements

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 语句)?

So my question is how these two compare in terms of performance (i have about 15-20 if-else statements on actual code)?

是否值得重构代码可读性与性能,还是对选项的滥用?

Is it worth refactoring the code readability vs performance or is a misusage of optionals?

如果 if/else-if 语句增长到 100+,性能损失是多少?

Also what is the performance penalty in case the if/else-if statements grown to 100+?

提前致谢

推荐答案

不要将 Optional 用于条件逻辑.

Don't use Optionals for conditional logic.

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

They were designed, to be returned from a method to indicate a potentially absent value.

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

Just because you can nicely chain them into a single line doesn't mean that it's understandable. Also you literally gain nothing. The performance overhead may be significant. In the worst case N objects being created and then discarded. Just stay with your "normal" if-else chains.

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

Instead of finding ways to make your current code more readable, take a step back and ask yourself why you need 15-20 if-else statements. Can you split some logic up? Why do you need a getter for so many different fields with potentially different types in the first place? etc.

这篇关于可选与 if/else-if 性能 java 8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆