logo

flatMap() módszer Java 8-ban

A Folyam Az API-t ben vezették be Java 8 amelyet az objektumgyűjtemények feldolgozására használnak. Az importálással használható java.util.stream csomag. Ebben a részben a Stream.flatMap() a Stream API módszere. Továbbá megbeszéljük a legfontosabb különbségek a Stream.flatMap() és a Stream.map() metódusok között a Java 8-ban.

mit teljes formában
flatMap() módszer Java 8-ban

Mielőtt rátérnénk a témára, először is megértjük a Stream.map() módszer. Mert a flatMap() módszer a térkép() módszer.

Java Stream.map() módszer

A Stream.map() metódus közbenső műveletet hajt végre a leképező függvény használatával. Minden elemhez új adatfolyamot állít elő. Az eredmény elérése érdekében az összes adatfolyamot egyetlen folyammá alakítja. ezért az adatfolyam minden eleme új folyammá alakul.

Szintaxis:

 Stream map(Function mapper) 

R: Ez egy típusparaméter, amely az új adatfolyam elemtípusát jelöli.

térképész: Ez egy olyan paraméter, amely nem zavaró, állapot nélküli függvény, amelyet minden elemre alkalmazni kell.

Példa a map() módszerre

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

Tekintsük a fenti állítást a térképhez folyam . A map() segítségével létrehoz egy eredő adatfolyamot. Minden iterációban a map() külön adatfolyamot hoz létre az eredménnyel a leképező függvény végrehajtásával. Végül a map() az összes adatfolyamot egyetlen adatfolyammá alakítja.

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); } } 

Kimenet:

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

Java Stream.flatMap() metódus

Ban ben Jáva 8 Streams, a flatMap() metódus a műveletet leképező függvényként alkalmazza, és elemértékek folyamát adja meg. Ez azt jelenti, hogy az egyes elemek minden iterációjában a map() metódus külön új adatfolyamot hoz létre. Az ellaposító mechanizmus használatával az összes adatfolyamot egyetlen eredő folyamba egyesíti. Röviden, a Stream of Stream értéklistává alakítására használják.

Szintaxis:

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

A metódus egy függvényt vesz fel argumentumként. Elfogadja a T-t paraméterként, és egy R-folyamot ad vissza.

R: Ez egy típusparaméter, amely az új adatfolyam elemtípusát jelöli.

térképész: Ez egy olyan paraméter, amely nem zavaró, állapot nélküli függvény, amelyet minden elemre alkalmazni kell. Új értékek folyamát állítja elő.

Röviden azt mondhatjuk, hogy a flatMap() metódus segít a konvertálásban Folyam nak nek Folyam . Ez teljesít lapítás (lapos vagy lapos) és feltérképezése (térkép), egyszerre. A Stream.flatMap() metódus egyesíti a műveleteket, azaz a flat és a map műveletet.

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

Értsük meg a lapítás jelentését.

Mi az a lapítás?

Lapítás Ez az a folyamat, amelynek során több listát konvertálnak, és az összes listát egyesítik, hogy egyetlen listát hozzanak létre, amely az összes lista összes elemét tartalmazza.

ha mást ciklus java

Lapítási példa

Fontolja meg a következő listákat:

string n java

Lapítás előtt: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]

Lapítás után: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]

Példa a flatMap() metódusra

 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()); 

Használhatunk flatMap() metódust egy adatfolyamon a List::stream leképezőfüggvénnyel. A stream terminál művelet végrehajtásakor a flatMap() minden eleme külön adatfolyamot biztosít. Az utolsó fázisban a flatMap() metódus az összes adatfolyamot új folyammá alakítja. A fenti adatfolyamban megfigyeljük, hogy nem tartalmaz duplikált értékeket.

Készítsünk egy Java programot, és használjuk a flatMap() metódust.

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>

Kimenet:

 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] 

Most már megértettük a Stream osztály mindkét metódusát. Mivel könnyen rámutathatunk a köztük lévő fő különbségekre.

Stream.flatMap() vs. Stream.map()

Az alábbi táblázat a Stream.flatMap() és a Stream.map() közötti fő különbségeket írja le.

flatMap() módszer Java 8-ban
Stream.flatMap() Stream.map()
Feldolgozza az adatfolyam értékfolyamát. Feldolgozza az értékfolyamot.
A leképezést a lapítással együtt végzi. Csak térképezést végez.
Átalakítja az adatokat a Streambőla Streamelésre. Adatfolyamból adatfolyamba alakítja át az adatokat.
Egy-a-többhöz leképezést használ. Egy-egy leképezést használ.
A leképező funkciója több értéket (értékfolyamot) állít elő minden bemeneti értékhez. A leképező funkciója minden bemeneti értékhez egyetlen értéket állít elő.
Használja a flatMap() metódust, ha a leképező függvény minden bemeneti értékhez több értéket állít elő. Használja a map() metódust, ha a leképező függvény minden bemeneti értékhez egyetlen értéket állít elő.