The Tok API je bil uveden v Java 8 ki se uporablja za obdelavo zbirk predmetov. Uporablja se lahko z uvozom java.util.stream paket. V tem razdelku bomo razpravljali o Stream.flatMap() metodo Stream API. Razpravljali bomo tudi o ključne razlike med metodo Stream.flatMap() in Stream.map() v Javi 8.
vzorčna koda c#
Preden preidemo na temo, bomo najprej razumeli Stream.map() metoda. Zaradi flatMap() Metoda temelji na zemljevid() metoda.
Metoda Java Stream.map().
The Stream.map() izvede vmesno operacijo z uporabo funkcije preslikave. Za vsak element ustvari nov tok. Vse tokove pretvori v en sam tok, da zagotovi rezultat. zato se vsak element toka pretvori v nov tok.
Sintaksa:
Stream map(Function mapper)
R: To je parameter tipa, ki predstavlja tip elementa novega toka.
maper: To je parameter, ki je nemoteča funkcija brez stanja, ki se uporablja za vsak element.
Primer metode map().
List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList());
Upoštevajte zgornjo izjavo za zemljevid tok . Ustvari nastali tok z uporabo map(). V vsaki ponovitvi map() ustvari ločen tok z rezultatom z izvajanjem funkcije preslikave. Končno map() pretvori vse tokove v en sam 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); } } Izhod:
Stream After applying the map() function: 24 90 134 38 174 4 18
Metoda Java Stream.flatMap().
notri Java 8 Streams, metoda flatMap() uporablja operacijo kot funkcijo preslikave in zagotavlja tok vrednosti elementov. To pomeni, da v vsaki ponovitvi vsakega elementa metoda map() ustvari ločen nov tok. Z uporabo mehanizma sploščenja združi vse tokove v en sam nastali tok. Skratka, uporablja se za pretvorbo Stream of Stream v seznam vrednosti.
Sintaksa:
Stream flatMap(Function<? super T,? extends Stream> mapper)
Metoda sprejme funkcijo kot argument. Sprejme T kot parameter in vrne tok R.
R: To je parameter tipa, ki predstavlja tip elementa novega toka.
maper: To je parameter, ki je nemoteča funkcija brez stanja, ki se uporablja za vsak element. Proizvaja tok novih vrednot.
Na kratko lahko rečemo, da metoda flatMap() pomaga pri pretvorbi Tok
flatMap() = Flattening (flat)+ mapping (map)
Razumejmo pomen sploščenja.
Kaj je sploščenje?
Sploščitev je postopek pretvorbe več seznamov seznamov in združitve vseh teh seznamov v en sam seznam, ki vsebuje vse elemente iz vseh seznamov.
enako metoda v Javi
Primer izravnave
Razmislite o naslednjih seznamih seznamov:
Pred sploščenjem: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]
Po sploščenju: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]
Primer 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());
Uporabimo lahko metodo flatMap() na toku s funkcijo preslikave List::stream. Ob izvedbi terminalske operacije toka vsak element flatMap() zagotovi ločen tok. V končni fazi metoda flatMap() pretvori vse tokove v nov tok. V zgornjem toku opazimo, da ne vsebuje podvojenih vrednosti.
Ustvarimo program Java in uporabimo metodo 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> Izhod:
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]
Zdaj smo razumeli obe metodi razreda Stream. Ker zlahka izpostavimo ključne razlike med njimi.
niz nadomesti vse jave
Stream.flatMap() Vs. Stream.map()
Naslednja tabela opisuje ključne razlike med Stream.flatMap() in Stream.map().
| Stream.flatMap() | Stream.map() |
|---|---|
| Obdeluje tok vrednosti toka. | Obdeluje tok vrednosti. |
| Izvaja preslikavo skupaj s sploščitvijo. | Izvaja samo preslikavo. |
| Preoblikuje podatke iz Stream | Podatke pretvarja iz toka v tok. |
| Uporablja preslikavo enega proti mnogo. | Uporablja preslikavo ena proti ena. |
| Njegova funkcija preslikave ustvari več vrednosti (tok vrednosti) za vsako vhodno vrednost. | Njegova funkcija preslikave ustvari posamezne vrednosti za vsako vhodno vrednost. |
| Uporabite metodo flatMap(), ko funkcija preslikave proizvaja več vrednosti za vsako vhodno vrednost. | Uporabite metodo map(), ko funkcija preslikave proizvaja posamezne vrednosti za vsako vhodno vrednost. |