Éviter NoSuchElementException avec Stream
J'ai le texte suivant Stream
:
Stream<T> stream = stream();
T result = stream.filter(t -> {
double x = getX(t);
double y = getY(t);
return (x == tx && y == ty);
}).findFirst().get();
return result;
Cependant, il n'est pas toujours un résultat qui me donne l'erreur suivante:
NoSuchElementException: Aucune valeur présente
Alors, comment puis-je retourner un null
si aucune valeur n'est présente?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Facultatif.orElse
, c'est beaucoup plus simple que de vérifierisPresent
:Stream#findFirst()
retourne unFacultatif
qui existe spécifiquement, de sorte que vous n'avez pas besoin de fonctionner surnull
valeurs.Sinon,
Option#get()
jette unNoSuchElementException
.Un
Optional
ne sera jamais exposer sa valeur si elle estnull
.Si vous avez vraiment de, il suffit de cocher
isPresent()
et retournull
vous-même.Optional
, ce qui peut avoir certains avantages par rapport à retourner null.Une autre méthode pour le remplacement de la
Facultatif.get
(qui a plus de chances d'échec de l'utilisateur intentions avec un NoSuchElementException) est plus détaillé de l'API introduit dans JDK10 appeléFacultatif.orElseThrow()
. Dans auteur des paroles de -Note :- L'implémentation sous-jacente de ces deux Api est la même, mais le second ne les lit plus clairement qu'un NoSuchElementException serait jeté par défaut si la valeur n'est pas présent, ce qui inlines à l'existant
Facultatif.orElseThrow(Fournisseur<? s'étend X> exceptionSupplier)
de mise en œuvre utilisés par les consommateurs explicitement en tant que suppléant.