Stream flatMap (Mappeur de fonctions) renvoie un flux constitué des résultats du remplacement de chaque élément de ce flux par le contenu d'un flux mappé produit en appliquant la fonction de mappage fournie à chaque élément. Stream flatMap (Mappeur de fonctions) est un opération intermédiaire . Ces opérations sont toujours paresseuses. Les opérations intermédiaires sont invoquées sur une instance Stream et une fois leur traitement terminé, elles donnent une instance Stream en sortie.
Note : Chaque flux mappé est fermé une fois son contenu placé dans ce flux. Si un flux mappé est nul, un flux vide est utilisé à la place.
flatMap() V/s carte() :
1) carte() prend un Stream et le transforme en un autre Stream. Il applique une fonction sur chaque élément de Stream et stocke la valeur de retour dans le nouveau Stream. Cela n’aplatit pas le flux. Mais flatMap() est la combinaison d'une carte et d'une opération plate, c'est-à-dire qu'elle applique une fonction aux éléments et les aplatit.
2) carte() est utilisé uniquement pour la transformation, mais flatMap() est utilisé à la fois pour la transformation et l'aplatissement.
Syntaxe :
< R>Flux< R>flatMap(Fonction< ? super T, ? extends Stream< ? extends R>> mapper) où R est le type d'élément du nouveau flux. Stream est une interface et T est le type d'éléments de flux. mapper est une fonction sans état qui est appliquée à chaque élément et la fonction renvoie le nouveau flux.>
Exemple 1 : Fonction flatMap() avec fonction de mappage fournie.
// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'5.6'>,>'7.4'>,>'4'>,> >'1'>,>'2.3'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(num ->Stream.of(num)).> >forEach(System.out::println);> >}> }> |
>
>
Sortir :
5.6 7.4 4 1 2.3>
Exemple 2 : Fonction flatMap() avec opération fournie de mappage de chaîne avec un caractère en position 2.
js chaîne multiligne
// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'Geeks'>,>'GFG'>,> >'techcodeview.com'>,>'gfg'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(str ->> >Stream.of(str.charAt(>2>))).> >forEach(System.out::println);> >}> }> |
>
chaîne dans un tableau java
>
Sortir :
e G e g>
Comment fonctionne flatMap() ?
Comme déjà expliqué dans l'article, flatMap() est la combinaison d'une carte et d'une opération plate, c'est-à-dire qu'elle applique d'abord la fonction map puis aplatit le résultat. Prenons quelques exemples pour comprendre ce qu'est exactement l'aplatissement d'un flux.
Exemple 1 :
La liste avant aplatissement :
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>
La liste comporte 2 niveaux et se compose de 3 petites listes. Après aplatissement, elle est transformée en structure à un seul niveau comme indiqué :
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>
Exemple 2 :
La liste avant aplatissement :
[ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>
La liste comporte 3 niveaux et se compose de 4 petites listes. Après aplatissement, elle est transformée en structure à un seul niveau comme indiqué :
['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>
Bref, on peut dire que s'il y a un Flux de Liste de << Type de données >> avant d'aplatir, puis en appliquant flatMap(), Flux de << Type de données >> est renvoyé après aplatissement.
Application :
// Java code for Stream flatMap(Function mapper)> import> java.util.*;> import> java.util.stream.Collectors;> > class> GFG> {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Creating a list of Prime Numbers> >List PrimeNumbers = Arrays.asList(>5>,>7>,>11>,>13>);> > >// Creating a list of Odd Numbers> >List OddNumbers = Arrays.asList(>1>,>3>,>5>);> > >// Creating a list of Even Numbers> >List EvenNumbers = Arrays.asList(>2>,>4>,>6>,>8>);> > >List listOfListofInts => >Arrays.asList(PrimeNumbers, OddNumbers, EvenNumbers);> > >System.out.println(>'The Structure before flattening is : '> +> >listOfListofInts);> > >// Using flatMap for transformating and flattening.> >List listofInts = listOfListofInts.stream()> >.flatMap(list ->list.stream())>> >.collect(Collectors.toList());> > >System.out.println(>'The Structure after flattening is : '> +> >listofInts);> >}> }> |
>
>
Sortir :
The Structure before flattening is : [[5, 7, 11, 13], [1, 3, 5], [2, 4, 6, 8]] The Structure after flattening is : [5, 7, 11, 13, 1, 3, 5, 2, 4, 6, 8]>