The Stream API je uveden u Java 8 koji se koristi za obradu zbirki objekata. Može se koristiti uvozom java.util.stream paket. U ovom odjeljku raspravljat ćemo o Stream.flatMap() metoda Stream API-ja. Također, razgovarat ćemo o ključne razlike između metoda Stream.flatMap() i Stream.map() u Javi 8.
java lambda primjer
Prije nego prijeđemo na temu, prvo ćemo razumjeti Stream.map() metoda. Jer ravna karta() metoda se temelji na karta() metoda.
Metoda Java Stream.map().
The Stream.map() metoda izvodi posrednu operaciju pomoću funkcije preslikavanja. Proizvodi novi tok za svaki element. Pretvara sve tokove u jedan tok kako bi pružio rezultat. stoga se svaki element toka pretvara u novi tok.
Sintaksa:
Stream map(Function mapper)
R: To je parametar tipa koji predstavlja tip elementa novog toka.
maper: To je parametar koji je neometajuća funkcija bez stanja koja se primjenjuje na svaki element.
Primjer metode map().
List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList());
Razmotrite gornju izjavu za mapu potok . Stvara rezultirajući tok pomoću map(). U svakoj iteraciji, map() stvara zasebni tok s rezultatom izvršavanjem funkcije mappera. Na kraju, map() pretvara sve tokove u jedan tok.
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); } }
Izlaz:
Stream After applying the map() function: 24 90 134 38 174 4 18
Metoda Java Stream.flatMap().
U Java 8 Streams, metoda flatMap() primjenjuje operaciju kao funkciju preslikavanja i osigurava tok vrijednosti elementa. To znači da u svakoj iteraciji svakog elementa metoda map() stvara zaseban novi tok. Korištenjem mehanizma izravnavanja, spaja sve tokove u jedan rezultantni tok. Ukratko, koristi se za pretvaranje Stream of Stream u popis vrijednosti.
Sintaksa:
Stream flatMap(Function<? super T,? extends Stream> mapper)
Metoda uzima funkciju kao argument. Prihvaća T kao parametar i vraća tok R.
R: To je parametar tipa koji predstavlja tip elementa novog toka.
maper: To je parametar koji je neometajuća funkcija bez statusa koja se primjenjuje na svaki element. Proizvodi tok novih vrijednosti.
Ukratko, možemo reći da metoda flatMap() pomaže u pretvaranju Stream
flatMap() = Flattening (flat)+ mapping (map)
Shvatimo značenje ravnanja.
Što je ravnanje?
Ravnanje je proces pretvaranja nekoliko popisa popisa i spajanja svih tih popisa kako bi se stvorio jedan popis koji sadrži sve elemente sa svih popisa.
java pretvara niz u cijeli broj
Primjer izravnavanja
Razmotrite sljedeće popise popisa:
SIM kartica je umetnuta, ali nema usluge android
Prije izravnavanja: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]
Nakon izravnavanja: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]
Primjer metode flatMap().
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());
Možemo koristiti metodu flatMap() na streamu s funkcijom mapiranja List::stream. Prilikom izvršavanja operacije terminala toka, svaki element flatMap() daje zaseban tok. U završnoj fazi, metoda flatMap() pretvara sve tokove u novi tok. U gornjem toku primjećujemo da ne sadrži duplicirane vrijednosti.
Kreirajmo Java program i upotrijebimo metodu 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('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>
Izlaz:
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]
Sada smo razumjeli obje metode klase Stream. Budući da lako možemo istaknuti ključne razlike među njima.
Stream.flatMap() vs. Stream.map()
Sljedeća tablica opisuje ključne razlike između Stream.flatMap() i Stream.map().
Stream.flatMap() | Stream.map() |
---|---|
Obrađuje tok vrijednosti toka. | Obrađuje tok vrijednosti. |
Izvodi preslikavanje zajedno s izravnavanjem. | Izvodi samo mapiranje. |
Pretvara podatke iz Streama | Pretvara podatke iz streama u stream. |
Koristi preslikavanje jedan prema više. | Koristi preslikavanje jedan na jedan. |
Njegova funkcija preslikavanja proizvodi više vrijednosti (tok vrijednosti) za svaku ulaznu vrijednost. | Njegova funkcija preslikavanja proizvodi pojedinačne vrijednosti za svaku ulaznu vrijednost. |
Upotrijebite metodu flatMap() kada funkcija preslikača proizvodi više vrijednosti za svaku ulaznu vrijednost. | Koristite metodu map() kada funkcija mappera proizvodi pojedinačne vrijednosti za svaku ulaznu vrijednost. |