El corrent L'API es va introduir a Java 8 que s'utilitza per processar les col·leccions d'objectes. Es pot utilitzar important el java.util.stream paquet. En aquesta secció, parlarem de Stream.flatMap() mètode de l'API Stream. A més, parlarem del diferències clau entre el mètode Stream.flatMap() i Stream.map() a Java 8.
alternativa xampp
Abans de passar al tema, primer, entendrem el Stream.map() mètode. Perquè el flatMap() mètode es basa en el mapa () mètode.
Mètode Java Stream.map().
El Stream.map() El mètode realitza una operació intermèdia mitjançant la funció mapper. Produeix un nou flux per a cada element. Transforma tots els fluxos en un sol flux per proporcionar el resultat. per tant, cada element del flux es converteix en un nou flux.
Sintaxi:
Stream map(Function mapper)
R: És un paràmetre de tipus que representa el tipus d'element del nou flux.
mapeador: És un paràmetre que no interfereix, una funció sense estat per aplicar a cada element.
Exemple del mètode map().
List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList());
Considereu la declaració anterior per obtenir un mapa de la corrent . Crea un flux resultant utilitzant el map(). En cada iteració, map() crea un flux separat amb el resultat executant la funció mapper. Finalment, map() transforma tots els fluxos en un sol flux.
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); } }
Sortida:
Stream After applying the map() function: 24 90 134 38 174 4 18
Mètode Java Stream.flatMap().
En Java 8 Streams, el mètode flatMap() aplica l'operació com a funció de mapeig i proporciona un flux de valors d'elements. Significa que en cada iteració de cada element el mètode map() crea un flux nou separat. Mitjançant l'ús del mecanisme d'aplanament, fusiona tots els corrents en un sol corrent resultant. En resum, s'utilitza per convertir un Stream of Stream en una llista de valors.
Sintaxi:
Stream flatMap(Function<? super T,? extends Stream> mapper)
El mètode pren una funció com a argument. Accepta T com a paràmetre i retorna un flux de R.
R: És un paràmetre de tipus que representa el tipus d'element del nou flux.
mapeador: És un paràmetre que és una funció sense estat i no interfereix per aplicar a cada element. Produeix un corrent de nous valors.
En resum, podem dir que el mètode flatMap() ajuda a convertir corrent
flatMap() = Flattening (flat)+ mapping (map)
Entenem el significat d'aplanar.
Què és aplanar?
Aplanament és el procés de convertir diverses llistes de llistes i combinar totes aquestes llistes per crear una única llista que contingui tots els elements de totes les llistes.
mètode igual a java
Exemple d'aplanament
Considereu les següents llistes de llistes:
Abans d'aplanar: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]
Després de l'aplanament: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]
Exemple del mètode 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());
Podem utilitzar un mètode flatMap() en un flux amb la funció de mapeador List::stream. En executar l'operació de terminal de flux, cada element de flatMap() proporciona un flux separat. En la fase final, el mètode flatMap() transforma tots els fluxos en un nou flux. En el flux anterior, observem que no conté valors duplicats.
Creem un programa Java i utilitzem el mètode 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>
Sortida:
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]
Ara, hem entès els dos mètodes de la classe Stream. Ja que podem assenyalar fàcilment les diferències clau entre ells.
Stream.flatMap() vs. Stream.map()
La taula següent descriu les diferències clau entre Stream.flatMap() i Stream.map().
obtenir connexió
Stream.flatMap() | Stream.map() |
---|---|
Processa el flux de valors del flux. | Processa el flux de valors. |
Realitza el mapeig juntament amb l'aplanament. | Només realitza mapes. |
Transforma les dades de Stream | Transforma les dades de Stream a Stream. |
Utilitza mapes One-To-Many. | Utilitza mapes One-To-One. |
La seva funció de mapeador produeix diversos valors (flux de valors) per a cada valor d'entrada. | La seva funció mapeadora produeix valors únics per a cada valor d'entrada. |
Utilitzeu el mètode flatMap() quan la funció de mapeig produeix diversos valors per a cada valor d'entrada. | Utilitzeu el mètode map() quan la funció mapper produeix valors únics per a cada valor d'entrada. |