У меня есть классический случай "Elvis operator", где я вызываю методы, которые каждый может возвращать 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
было что - то похожее на оператор Элвиса:
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
Существует ли более эффективный и идиоматический способ реализации шаблона оператора Elvis в Java 8?