我有一个经典的“Elvis操作符”案例,其中我调用的每个方法都可能返回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操作符模式的更高效且习惯用法的方法是否存在?
null
结果,则该方法返回一个空的Optional
*”。 - Holger