logo

Méthode flatMap() en Java 8

Le Flux L'API a été introduite dans Java8 qui est utilisé pour traiter les collections d’objets. Il peut être utilisé en important le java.util.stream emballer. Dans cette section, nous aborderons les Stream.flatMap() méthode de l’API Stream. Nous discuterons également de principales différences entre les méthodes Stream.flatMap() et Stream.map() dans Java 8.

mini barre d'outils Excel
Méthode flatMap() en Java 8

Avant d'aborder le sujet, nous comprendrons d'abord le Stream.map() méthode. Parce que le flatMap() la méthode est basée sur carte() méthode.

Méthode Java Stream.map()

Le Stream.map() La méthode effectue une opération intermédiaire en utilisant la fonction mapper. Il produit un nouveau flux pour chaque élément. Il transforme tous les flux en un seul flux pour fournir le résultat. par conséquent, chaque élément du flux est converti en un nouveau flux.

Syntaxe:

 Stream map(Function mapper) 

R : Il s'agit d'un paramètre de type qui représente le type d'élément du nouveau flux.

mappeur : Il s’agit d’un paramètre qui est une fonction sans interférence et sans état à appliquer à chaque élément.

Exemple de la méthode map()

 List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList()); 

Considérez la déclaration ci-dessus pour une carte de la flux . Il crée un flux résultant en utilisant map(). À chaque itération, map() crée un flux séparé avec le résultat en exécutant la fonction mapper. Enfin, map() transforme tous les flux en un seul flux.

MapExample.java

 import java.util.*; public class MapExample { public static void main(String args[]) { System.out.println('Stream After applying the map() function: '); //creats a list of integers List list = Arrays.asList(12, 45, 67, 19, 87, 2, 9); //creating a new stream of the elements an prints the same using the foreach loop list.stream().map(number -> number * 2).forEach(System.out::println); } } 

Sortir:

 Stream After applying the map() function: 24 90 134 38 174 4 18 

Méthode Java Stream.flatMap()

Dans Java 8 Streams, la méthode flatMap() applique l'opération en tant que fonction de mappeur et fournit un flux de valeurs d'éléments. Cela signifie qu'à chaque itération de chaque élément, la méthode map() crée un nouveau flux distinct. En utilisant le mécanisme d’aplatissement, il fusionne tous les flux en un seul flux résultant. En bref, il sert à convertir un Stream de Stream en une liste de valeurs.

Syntaxe:

 Stream flatMap(Function<? super T,? extends Stream> mapper) 

La méthode prend une fonction comme argument. Il accepte T comme paramètre et renvoie un flux de R.

R : Il s'agit d'un paramètre de type qui représente le type d'élément du nouveau flux.

mappeur : Il s'agit d'un paramètre qui est une fonction sans interférence et sans état à appliquer à chaque élément. Cela produit un flux de nouvelles valeurs.

En bref, on peut dire que la méthode flatMap() aide à convertir Flux à Flux . Il effectue aplanissement (plat ou aplatir) et cartographie (carte), simultanément. La méthode Stream.flatMap() combine les deux opérations, c'est-à-dire flat et map.

 flatMap() = Flattening (flat)+ mapping (map) 

Comprenons la signification de l'aplatissement.

Qu’est-ce que l’aplatissement ?

Aplanissement est le processus de conversion de plusieurs listes de listes et de fusion de toutes ces listes pour créer une seule liste contenant tous les éléments de toutes les listes.

Bourne encore une coquille

Exemple d'aplatissement

Considérez les listes de listes suivantes :

Avant l'aplatissement : [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]

Après aplatissement : [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]

Exemple de la méthode flatMap()

 List country = Stream.of(Arrays.asList(&apos;Colombia&apos;, &apos;Finland&apos;, &apos;Greece&apos;, &apos;Iceland&apos;, &apos;Liberia&apos;, &apos;Mali&apos;, &apos;Mauritius&apos;), Arrays.asList(&apos;Peru&apos;, &apos;Serbia&apos;, &apos;Singapore&apos;, &apos;Turkey&apos;, &apos;Uzbekistan&apos;, &apos;Yemen&apos;, &apos;Zimbabwe&apos;, &apos;Greece&apos;, &apos;Iceland&apos;)).flatMap(List::stream) .collect(Collectors.toList()); 

Nous pouvons utiliser une méthode flatMap() sur un flux avec la fonction mapper List::stream. Lors de l'exécution de l'opération du terminal de flux, chaque élément de flatMap() fournit un flux distinct. Dans la phase finale, la méthode flatMap() transforme tous les flux en un nouveau flux. Dans le flux ci-dessus, nous observons qu'il ne contient pas de valeurs en double.

Créons un programme Java et utilisons la méthode flatMap().

FlatMapExample.java

 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FlatmapExample { public static void main(String args[]) { //creating ArrayList List productlist1 = Arrays.asList(&apos;Printer&apos;, &apos;Mouse&apos;, &apos;Keyboard&apos;, &apos;Motherboard&apos;); List productlist2 = Arrays.asList(&apos;Scanner&apos;, &apos;Projector&apos;, &apos;Light Pen&apos;); List productlist3 = Arrays.asList(&apos;Pen Drive&apos;, &apos;Charger&apos;, &apos;WIFI Adapter&apos;, &apos;Cooling Fan&apos;); List productlist4 = Arrays.asList(&apos;CPU Cabinet&apos;, &apos;WebCam&apos;, &apos;USB Light&apos;, &apos;Microphone&apos;, &apos;Power cable&apos;); List<list> allproducts = new ArrayList<list>(); //adding elements to the list allproducts.add(productlist1); allproducts.add(productlist2); allproducts.add(productlist3); allproducts.add(productlist4); //creating a list of all products List listOfAllProducts = new ArrayList(); //for each loop iterates over the list for(List pro : allproducts) { for(String product : pro) { //adds all products to the list listOfAllProducts.add(product); } } System.out.println(&apos;List Before Applying mapping and Flattening: 
&apos;); //prints stream before applying the flatMap() method System.out.println(listOfAllProducts); System.out.println(); //creats a stream of elemnts using flatMap() List flatMapList = allproducts .stream().flatMap(pList -&gt; pList.stream()).collect(Collectors.toList()); System.out.println(&apos;List After Applying Mapping and Flattening Operation: 
&apos;); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>

Sortir:

 List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] 

Maintenant, nous avons compris les deux méthodes de la classe Stream. Puisque nous pouvons facilement souligner les principales différences entre eux.

programmes c

Stream.flatMap() contre. Stream.map()

Le tableau suivant décrit les principales différences entre Stream.flatMap() et Stream.map().

Méthode flatMap() en Java 8
Stream.flatMap() Stream.map()
Il traite le flux de valeurs du flux. Il traite le flux de valeurs.
Il effectue le mappage ainsi que l'aplatissement. Il effectue uniquement le mappage.
Il transforme les données de Streamruisseler. Il transforme les données de Stream en Stream.
Il utilise le mappage un-à-plusieurs. Il utilise le mappage One-To-One.
Sa fonction mapper produit plusieurs valeurs (flux de valeurs) pour chaque valeur d'entrée. Sa fonction mappeur produit des valeurs uniques pour chaque valeur d'entrée.
Utilisez la méthode flatMap() lorsque la fonction mappeur produit plusieurs valeurs pour chaque valeur d'entrée. Utilisez la méthode map() lorsque la fonction mapper produit des valeurs uniques pour chaque valeur d'entrée.