Необязательный orElse Необязательный в Java
Я работал с новымНеобязательный тип в Java 8и я столкнулся с тем, что похоже на обычную операцию, которая не поддерживается функционально: "orElseOptional"
Рассмотрим следующую схему:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
Существует много форм этого паттерна, но он сводится к желанию "orElse" для необязательного параметра, который принимает функцию, создающую новый необязательный параметр, вызываемый только в том случае, если текущий не существует.
Это реализация будет выглядеть так:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Мне любопытно, есть ли причина, по которой такого метода не существует, если я просто использую Optional непреднамеренным образом, и какие другие способы люди придумали для решения этого случая.
Я должен сказать, что я думаю, что решения, включающие пользовательские служебные классы / методы, не элегантны, потому что люди, работающие с моим кодом, не обязательно будут знать, что они существуют.
Кроме того, если кто-нибудь знает, будет ли такой метод включен в JDK 9, и где я мог бы предложить такой метод? Мне кажется, это довольно вопиющее упущение в API.