Optional vs if/else-if performance 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+,性能损失是什么?

提前致谢


答案 1

不要将 Optionals 用于条件逻辑。

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

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


与其想方设法使当前代码更具可读性,不如退后一步,问问自己为什么需要 15-20 个 if-else 语句。你能把一些逻辑分开吗?为什么首先需要一个具有可能不同类型的不同字段的获取器?等。


答案 2

还有第三种形式(仍然允许一些变化)。

return Stream.<Supplier<Object>>of(message::getA, message::getB, message::getC)
        .map(Supplier::get)
        .filter(Objects::nonNull)
        .findFirst()
        .orElse(null);

可能是目前最不灵活和效率最低的,但很清楚。


推荐