gpt4 book ai didi

java - 检查Optionals是否相等的便捷方法

转载 作者:行者123 更新时间:2023-12-03 23:13:41 25 4
gpt4 key购买 nike

我正在寻找一种更简便的证明Optional值相等的方法。

这是Oracle Blog post的建议:

Optional<USB> maybeUSB = ...; maybeUSB.filter(usb -> "3.0".equals(usb.getVersion())
.ifPresent(() -> System.out.println("ok"));

恕我直言导致类似
if (maybeUSB.filter(c -> "3.0".equals(c.getVersion())).isPresent()) {
...
}

当然,这是一个糟糕的例子,因为它比较版本而不是USB本身的实例,但是我认为它仍然可以证明我的观点。

这真的很好吗?

没有
boolean presentAndEquals(Object)

要么
boolean deepEquals(Object)

我在这里想念什么吗?

编辑:

我对Optionals.equals也不满意。
我真的必须先将一个对象装箱才能立即取消装箱并检查是否相等吗?

编辑II:

很该死的满意:
optional
.filter(nonOptional::equals)
.isPresent()

如今。

经过几年的函数式编程, if失去了相关性的 很多

最佳答案

您有很多选择。

已经指出:

boolean isEqual = maybeFoo.equals(Optional.of(testFoo));

或者:
boolean isEqual = maybeFoo.isPresent() && maybeFoo.get().equals(testFoo);

要么:
boolean isEqual = testFoo.equals(maybeFoo.orElse(null));

最后两个确实有稍微不同的语义:当 maybeFoo为空而 testFoo为null时,每个返回不同的值。尚不清楚哪个是正确的响应(我猜这是没有标准API方法执行此操作的原因之一)。

如果您阅读了 Optional API文档并提出了一些想法,您可能会提出其他建议。文档中没有任何魔术。

更一般而言,如果您经常要对此加以打扰,以至于打扰您,则可能是您使用错误的原理来接近 Optional

正如我所看到的, Optional是关于确认某些东西不会总是存在的,并且您需要(有时是冗长的)代码来处理它。

这应该是异常(exception)。尽可能尝试创建 不能为null或 Optional.empty()的变量。

在不可避免的情况下,请接受需要额外代码的事实。

关于java - 检查Optionals是否相等的便捷方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com