The Srautas API buvo pristatyta Java 8 kuris naudojamas objektų kolekcijoms apdoroti. Jis gali būti naudojamas importuojant java.util.stream paketą. Šiame skyriuje aptarsime Stream.flatMap() Stream API metodas. Taip pat aptarsime pagrindiniai skirtumai tarp Stream.flatMap() ir Stream.map() metodų Java 8.
c kodas abs
Prieš pereidami prie temos, pirmiausia suprasime Stream.map() metodas. Nes plokščias žemėlapis () metodas pagrįstas žemėlapis () metodas.
Java Stream.map() metodas
The Stream.map() metodas atlieka tarpinę operaciją naudodamas žemėlapio funkciją. Kiekvienam elementui sukuriamas naujas srautas. Jis paverčia visus srautus į vieną srautą, kad būtų pasiektas rezultatas. todėl kiekvienas srauto elementas paverčiamas nauju srautu.
Sintaksė:
Stream map(Function mapper)
R: Tai tipo parametras, nurodantis naujo srauto elemento tipą.
kartografas: Tai parametras, kuris yra netrukdanti, be būsenos funkcija, taikoma kiekvienam elementui.
Žemėlapio() metodo pavyzdys
List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList());
Apsvarstykite aukščiau pateiktą teiginį, kad sukurtumėte žemėlapį srautas . Jis sukuria gautą srautą naudodamas žemėlapį (). Kiekvienoje iteracijoje map() sukuria atskirą srautą su rezultatu, vykdydama atvaizdavimo funkciją. Pagaliau map() paverčia visus srautus į vieną srautą.
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); } }
Išvestis:
Stream After applying the map() function: 24 90 134 38 174 4 18
Java Stream.flatMap() metodas
Į Java 8 srautai, flatMap() metodas taiko operaciją kaip atvaizdavimo funkciją ir pateikia elementų reikšmių srautą. Tai reiškia, kad kiekvienoje kiekvieno elemento iteracijoje map() metodas sukuria atskirą naują srautą. Naudodamas išlyginimo mechanizmą, jis sujungia visus srautus į vieną gaunamą srautą. Trumpai tariant, jis naudojamas Stream of Stream konvertuoti į verčių sąrašą.
Sintaksė:
Stream flatMap(Function<? super T,? extends Stream> mapper)
Metodas naudoja funkciją kaip argumentą. Jis priima T kaip parametrą ir grąžina R srautą.
R: Tai tipo parametras, nurodantis naujo srauto elemento tipą.
kartografas: Tai parametras, kuris yra netrukdanti, be būsenos funkcija, taikoma kiekvienam elementui. Tai sukuria naujų vertybių srautą.
Trumpai tariant, galime pasakyti, kad flatMap() metodas padeda konvertuoti Srautas
flatMap() = Flattening (flat)+ mapping (map)
Supraskime išlyginimo prasmę.
Kas yra išlyginimas?
Išlyginimas yra kelių sąrašų sąrašų konvertavimo ir visų sąrašų sujungimo procesas, kad būtų sukurtas vienas sąrašas, kuriame būtų visi elementai iš visų sąrašų.
'prim's algoritmas'
Išlyginimo pavyzdys
Apsvarstykite šiuos sąrašų sąrašus:
Prieš išlyginimą: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]
Po išlyginimo: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]
FlatMap() metodo pavyzdys
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());
Sraute galime naudoti flatMap() metodą su žemėlapių sudarymo funkcija List::stream. Vykdant srauto terminalo operaciją, kiekvienas flatMap() elementas suteikia atskirą srautą. Paskutiniame etape flatMap() metodas paverčia visus srautus į naują srautą. Aukščiau pateiktame sraute pastebime, kad jame nėra pasikartojančių verčių.
Sukurkime Java programą ir naudokime flatMap() metodą.
FlatMapExample.java
c programos
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>
Išvestis:
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]
Dabar supratome abu „Stream“ klasės metodus. Kadangi galime lengvai nurodyti pagrindinius jų skirtumus.
Stream.flatMap() Vs. Stream.map()
Šioje lentelėje aprašomi pagrindiniai skirtumai tarp Stream.flatMap() ir Stream.map().
Stream.flatMap() | Stream.map() |
---|---|
Jis apdoroja srauto vertybių srautą. | Jis apdoroja vertybių srautą. |
Jis atlieka kartografavimą kartu su išlyginimu. | Jis atlieka tik žemėlapių sudarymą. |
Jis transformuoja duomenis iš srauto | Jis transformuoja duomenis iš srauto į srautą. |
Jis naudoja atvaizdavimą „One-to-Many“. | Jis naudoja „vienas su vienu“ atvaizdavimą. |
Tai kartografavimo funkcija kiekvienai įvesties vertei sukuria kelias vertes (reikšmių srautą). | Atvaizdavimo funkcija kiekvienai įvesties reikšmei sukuria atskiras reikšmes. |
Naudokite flatMap() metodą, kai atvaizdavimo funkcija sukuria kelias reikšmes kiekvienai įvesties reikšmei. | Naudokite map() metodą, kai atvaizdavimo funkcija kiekvienai įvesties reikšmei sukuria atskiras reikšmes. |