J'ai travaillé avec le nouveau type facultatif dans Java 8 , et j'ai rencontré ce qui semble être une opération courante qui n'est pas prise en charge fonctionnellement: un "orElseOptional"
Considérez le modèle suivant:
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);
}
Il existe de nombreuses formes de ce modèle, mais cela revient à vouloir un "orElse" sur un optionnel qui prend une fonction produisant un nouveau optionnel, appelé uniquement si l'actuel n'existe pas.
Son implémentation ressemblerait à ceci:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Je suis curieux de savoir s'il y a une raison pour laquelle une telle méthode n'existe pas, si j'utilise simplement Optionnel de manière non intentionnelle, et quelles autres façons les gens ont trouvées pour traiter ce cas.
Je dois dire que je pense que les solutions impliquant des classes / méthodes utilitaires personnalisées ne sont pas élégantes car les personnes travaillant avec mon code ne sauront pas nécessairement qu'elles existent.
De plus, si quelqu'un le sait, une telle méthode sera-t-elle incluse dans JDK 9, et où puis-je proposer une telle méthode? Cela me semble être une omission assez flagrante de l'API.
orElseGet()
pour ce dont OP a besoin, mais il ne génère pas une belle syntaxe en cascade.