Java Language FlatMap


Exemple

flatMap est similaire à map . La différence est décrite par le javadoc comme suit:

Cette méthode est similaire à map(Function) , mais le mappeur fourni est un mappeur dont le résultat est déjà Optional . flatMap est flatMap , flatMap ne l'enveloppe pas avec un Optional supplémentaire.

En d'autres termes, lorsque vous enchaînez un appel de méthode qui renvoie un Optional , l'utilisation de Optional.flatMap évite de créer des options Optionals imbriquées.

Par exemple, compte tenu des classes suivantes:

public class Foo {
    Optional<Bar> getBar(){
        return Optional.of(new Bar());
    }
}

public class Bar {
}

Si vous utilisez Optional.map , vous obtiendrez un Optional imbriqué; c'est-à-dire Optional<Optional<Bar>> .

Optional<Optional<Bar>> nestedOptionalBar =
    Optional.of(new Foo())
        .map(Foo::getBar);

Cependant, si vous utilisez Optional.flatMap , vous obtiendrez un simple Optional ; c'est-à-dire Optional<Bar> .

Optional<Bar> optionalBar =
    Optional.of(new Foo())
        .flatMap(Foo::getBar);