sách gpt4 ăn đã đi

java - 如何在 Java 8 中实现 Elvis 运算符?

In lại 作者:搜寻专家 更新时间:2023-10-30 21:26:23 26 4
mua khóa gpt4 giày nike

我遇到了经典的“猫王运算符”案例,我正在调用每个可能返回 null 的方法并将它们链接在一起:

thing?:nullableMethod1(a)?:nullableMethod2(b)?:nullableMethod3()

在 Java 8 中,我发现最忠实的实现是这样的:

return Optional.ofNullable(thing)
.flatMap(x -> Optional.ofNullable(x.nullableMethod1(a)))
.flatMap(y -> Optional.ofNullable(y.nullableMethod2(b)))
.flatMap(z -> Optional.ofNullable(z.nullableMethod3()))

我希望 Java 的 Không bắt buộc 有类似于 elvis 运算符的东西:

public Optional elvisOperator(Function mapper) {
return flatMap(t -> Optional.ofNullable(mapper.apply(t));
}

这样我就不必包装每个返回值:

return Optional.ofNullable(thing)
.elvisOperator(x -> x.nullableMethod1(a))
.elvisOperator(y -> y.nullableMethod2(b))
.elvisOperator(Z::nullableMethod3); // also nice

在 Java 8 中是否有更高效和惯用的方式来实现 Elvis 运算符模式?

câu trả lời hay nhất

也许我忽略了一些东西,但是你有什么理由不能使用 Optional#map ?

以下示例不打印任何内容,因为 Không bắt buộc Đúng短路,如果 Không bắt buộc 中的值不存在(它是 vô giá trị hoặc Không bắt buộc 为空),它被视为空。

Optional.ofNullable("test")
.map(s -> null)
.ifPresent(System.out::println);

出于这个原因,我认为您可以执行以下操作:

return Optional.ofNullable(thing)
.map(x -> x.nullableMethod1(a))
.map(y -> y.nullableMethod2(b))
.map(Z::nullableMethod3);

这将映射您的 thing 如果它存在,否则返回一个空的 Không bắt buộc

关于java - 如何在 Java 8 中实现 Elvis 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285813/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress