gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:23 26 4
gpt4 key购买 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 的 Optional 有类似于 elvis 运算符的东西:

public<U> Optional<U> elvisOperator(Function<? super T, ? extends U> 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 运算符模式?

最佳答案

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

以下示例不打印任何内容,因为 Optional短路,如果 Optional 中的值不存在(它是 nullOptional 为空),它被视为空。

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 如果它存在,否则返回一个空的 Optional

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

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