logo

метод flatMap() в Java 8

The Поток API беше въведен през Java 8 който се използва за обработка на колекциите от обекти. Може да се използва чрез импортиране на java.util.stream пакет. В този раздел ще обсъдим Stream.flatMap() метод на Stream API. Освен това ще обсъдим ключови разлики между метода Stream.flatMap() и Stream.map() в Java 8.

празен списък java
метод flatMap() в Java 8

Преди да преминем към темата, първо ще разберем Stream.map() метод. Тъй като flatMap() методът се основава на карта() метод.

Java Stream.map() Метод

The Stream.map() методът изпълнява междинна операция с помощта на функцията mapper. Той създава нов поток за всеки елемент. Той трансформира всички потоци в един поток, за да осигури резултата. следователно всеки елемент от потока се преобразува в нов поток.

Синтаксис:

 Stream map(Function mapper) 

R: Това е тип параметър, който представя типа елемент на новия поток.

картограф: Това е параметър, който не пречи, функция без състояние, която се прилага към всеки елемент.

Пример за метода map().

 List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList()); 

Разгледайте горното твърдение за карта на поток . Той създава резултатен поток с помощта на map(). При всяка итерация map() създава отделен поток с резултата чрез изпълнение на функцията mapper. Най-накрая map() трансформира всички потоци в един поток.

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); } } 

Изход:

 Stream After applying the map() function: 24 90 134 38 174 4 18 

Java Stream.flatMap() Метод

в Java 8 Потоци, методът flatMap() прилага операция като функция за картографиране и предоставя поток от стойности на елементи. Това означава, че при всяка итерация на всеки елемент методът map() създава отделен нов поток. Чрез използването на механизма за изравняване той обединява всички потоци в един резултатен поток. Накратко, той се използва за преобразуване на поток от поток в списък от стойности.

Синтаксис:

 Stream flatMap(Function<? super T,? extends Stream> mapper) 

Методът приема функция като аргумент. Той приема T като параметър и връща поток от R.

R: Това е тип параметър, който представя типа елемент на новия поток.

картограф: Това е параметър, който е неинтерферираща функция без състояние, която се прилага към всеки елемент. Той произвежда поток от нови ценности.

Накратко можем да кажем, че методът flatMap() помага при конвертирането Поток да се Поток . Изпълнява сплескване (плоска или сплескана) и картографиране (карта), едновременно. Методът Stream.flatMap() съчетава двете операции, т.е. плоски и карта.

 flatMap() = Flattening (flat)+ mapping (map) 

Нека разберем значението на сплескването.

Какво е сплескване?

Сплескване е процес на конвертиране на няколко списъка от списъци и обединяване на всички тези списъци, за да се създаде един списък, съдържащ всички елементи от всички списъци.

shweta tiwari актьор

Пример за изравняване

Разгледайте следните списъци със списъци:

Преди сплескване: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]

След сплескване: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]

Пример за метода flatMap().

 List country = Stream.of(Arrays.asList(&apos;Colombia&apos;, &apos;Finland&apos;, &apos;Greece&apos;, &apos;Iceland&apos;, &apos;Liberia&apos;, &apos;Mali&apos;, &apos;Mauritius&apos;), Arrays.asList(&apos;Peru&apos;, &apos;Serbia&apos;, &apos;Singapore&apos;, &apos;Turkey&apos;, &apos;Uzbekistan&apos;, &apos;Yemen&apos;, &apos;Zimbabwe&apos;, &apos;Greece&apos;, &apos;Iceland&apos;)).flatMap(List::stream) .collect(Collectors.toList()); 

Можем да използваме метод flatMap() на поток с функцията за картографиране List::stream. При изпълнение на операцията на терминалния поток всеки елемент на flatMap() осигурява отделен поток. В последната фаза методът flatMap() трансформира всички потоци в нов поток. В горния поток наблюдаваме, че той не съдържа дублирани стойности.

Нека създадем Java програма и използваме метода 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(&apos;Printer&apos;, &apos;Mouse&apos;, &apos;Keyboard&apos;, &apos;Motherboard&apos;); List productlist2 = Arrays.asList(&apos;Scanner&apos;, &apos;Projector&apos;, &apos;Light Pen&apos;); List productlist3 = Arrays.asList(&apos;Pen Drive&apos;, &apos;Charger&apos;, &apos;WIFI Adapter&apos;, &apos;Cooling Fan&apos;); List productlist4 = Arrays.asList(&apos;CPU Cabinet&apos;, &apos;WebCam&apos;, &apos;USB Light&apos;, &apos;Microphone&apos;, &apos;Power cable&apos;); 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(&apos;List Before Applying mapping and Flattening: 
&apos;); //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 -&gt; pList.stream()).collect(Collectors.toList()); System.out.println(&apos;List After Applying Mapping and Flattening Operation: 
&apos;); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>

Изход:

 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] 

Сега разбрахме и двата метода на класа Stream. Тъй като лесно можем да посочим основните разлики между тях.

мултиплексор

Stream.flatMap() Vs. Stream.map()

Следната таблица описва основните разлики между Stream.flatMap() и Stream.map().

метод flatMap() в Java 8
Stream.flatMap() Stream.map()
Той обработва потока от стойности на потока. Той обработва потока от ценности.
Той извършва картографиране заедно с изравняване. Извършва само картографиране.
Той трансформира данни от Streamкъм поток. Той трансформира данни от поток в поток.
Той използва картографиране 'един към много'. Той използва едно към едно картографиране.
Неговата функция за картографиране създава множество стойности (поток от стойности) за всяка входна стойност. Неговата функция за картографиране произвежда единични стойности за всяка входна стойност.
Използвайте метода flatMap(), когато функцията за картографиране произвежда множество стойности за всяка входна стойност. Използвайте метода map(), когато функцията mapper произвежда единични стойности за всяка входна стойност.