C'était assez ennuyeux d'essayer d'obtenir quelque chose de non vide du flux Optional
en java. Je n'avais pas d'autre choix que de faire de mon mieux avec filter () '' ou
flatMap () '' comme indiqué sur https://www.baeldung.com/java-filter-stream-of-optional. Cependant, cela est devenu beaucoup plus facile avec l'ajout de Optional :: stream
de java 9.
Supposons maintenant qu'il y ait une fonction qui renvoie «« Option.empty () »« s'il s'agit d'un caractère vide, comme illustré ci-dessous. Supposons que vous souhaitiez l'appliquer à chaque élément d'une liste de chaînes pour obtenir une liste de caractères non vides.
static Optional<String> map(String s) {
if (s.length() == 0) {
return Optional.empty();
}
return Optional.of(s);
}
C'est comme ça de travailler dur avec filter </ code>.
List.of("1", "2", ,"", "3").stream()
.map(Hoge::map)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
En utilisant `` Optional :: stream``` de java 9, c'est le cas.
List.of("1", "2", "", "3").stream()
.map(Hoge::map)
.flatMap(Optional::stream)
.collect(Collectors.toList());