【发布时间】:2019-02-16 13:00:54
【问题描述】:
我有经典的“猫王操作员”案例,我正在调用每个可能返回 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 运算符模式是否有更有效和惯用的方法?
【问题讨论】:
标签: java java-8 functional-programming optional