J'implémente un flux dans lequel j'utilise une collection listOfFoo pour obtenir les identifiants de tous les éléments de cette liste et les utiliser pour obtenir les valeurs des instances Bar.
Je voudrais m'assurer que cette méthode lèvera ResourceNotFoundException au cas où il n'y aurait pas d'éléments sur la liste des barres, bien que dans l'état actuel, elle vérifie si les barres de la liste sont nulles et non, car elles contient une liste vide.
Pourriez-vous s'il vous plaît m'aider et suggérer une solution?
List<Bar> bars = Optional.ofNullable( listOfFoos.stream() .map(Foo::getId) .map(fooId -> service.getBars(fooId)) .filter(Objects::nonNull) .collect(Collectors.toList())) .orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));
3 Réponses :
Ajoutez simplement un Optional.filter
pour cela alors. Vous pouvez le faire comme:
List<Bar> bars = Optional.ofNullable( listOfFoos.stream().map(fooId -> service.getBars(fooId)) .filter(Objects::nonNull).collect(Collectors.toList())) .filter(a -> !a.isEmpty()) .orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));
À part: Par l'implémentation partagée dans le code, la liste renvoyée par le flux ne peut pas être null
, donc Facultatif .ofNullable
pourrait éventuellement être remplacé par Optional.of
.
Je ne vois pas vraiment l'intérêt d'utiliser Facultatif
, ce serait plus lisible sans lui:
List<Bar> bars = listOfFoos.stream() .map(Foo::getId) .map(service::getBars) .collect(Collectors.toList()); if (bars.isEmpty()) { throw new ResourceNotFoundException(Bar.class, OBJECT_NULL); }
Le livre Effective Java mentionne ce qui suit:
Les types de conteneurs, y compris les collections, les cartes, les flux, les tableaux et Les options ne doivent pas être enveloppées dans des options. (P.252)