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
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
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('Colombia', 'Finland', 'Greece', 'Iceland', 'Liberia', 'Mali', 'Mauritius'), Arrays.asList('Peru', 'Serbia', 'Singapore', 'Turkey', 'Uzbekistan', 'Yemen', 'Zimbabwe', 'Greece', 'Iceland')).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('Printer', 'Mouse', 'Keyboard', 'Motherboard'); List productlist2 = Arrays.asList('Scanner', 'Projector', 'Light Pen'); List productlist3 = Arrays.asList('Pen Drive', 'Charger', 'WIFI Adapter', 'Cooling Fan'); List productlist4 = Arrays.asList('CPU Cabinet', 'WebCam', 'USB Light', 'Microphone', 'Power cable'); 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('List Before Applying mapping and Flattening: '); //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 -> pList.stream()).collect(Collectors.toList()); System.out.println('List After Applying Mapping and Flattening Operation: '); //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.
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ől | 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ő. |