4 votes

Comment utiliser l'opérateur optionnel de Java pour mettre en correspondance plusieurs sous-types ?

Je veux utiliser l'opérateur java Optional pour éviter les contrôles nuls du genre :

if(outher != null && outher.getNested() != null &&
          outher.getNested().getInner() != null && outher.getNested().getAnotherInner() != null)

J'ai regardé quelques tutoriels sur Internet et la feuille de route Java, mais je n'ai pas trouvé comment résoudre le problème : outher.getNested.getInner() != null && outher.getNested.getAnotherInner != null partie.

Alors comment faire ça correctement quelque chose comme :

Optional.of(outher)
.map(Outher::getNested)
.map(Nested::getInner)
.map(Nested::getAnotherInner)
.isPresent();

serait génial

3voto

ekaerovets Points 753

Le problème est que .map(Nested::getInner) renvoie une instance de Inner, mais il devrait renvoyer Outer.

Ma suggestion est la suivante :

Optional.ofNullable(outher)
.map(Outher::getNested)
.map((outer) -> outer.getInner() == null ? null : outer)
.map(Nested::getAnotherInner)
.isPresent();

Je ne suis pas sûr de la méthode FlatMap, car il faut mapper une entité sur elle-même.

1voto

Eugene Points 6271

Eh bien, il y a un moyen d'utiliser flatmap si vous voulez vraiment :

 boolean result = Optional.ofNullable(outer)
            .map(Outer::getNested)
            .filter(x-> x.getInner() != null)
            .map(Nested::getAnotherInner)
            .isPresent();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X