logo

Метод flatMap() у Java 8

The Потік API було представлено в Java 8 який використовується для обробки колекцій об’єктів. Його можна використовувати, імпортувавши java.util.stream пакет. У цьому розділі ми обговоримо Stream.flatMap() метод Stream API. Також ми обговоримо ключові відмінності між методами Stream.flatMap() і Stream.map() у Java 8.

int подвоїти
Метод flatMap() у Java 8

Перш ніж перейти до теми, спочатку розберемося Stream.map() метод. Тому що flatMap() Метод заснований на map() метод.

Метод Java Stream.map().

The Stream.map() метод виконує проміжну операцію за допомогою функції відображення. Він створює новий потік для кожного елемента. Він перетворює всі потоки в один потік, щоб забезпечити результат. тому кожен елемент потоку перетворюється на новий потік.

Синтаксис:

 Stream map(Function mapper) 

Р: Це параметр типу, який представляє тип елемента нового потоку.

картограф: Це параметр, який не заважає функції без стану, яка застосовується до кожного елемента.

Приклад методу 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.

Р: Це параметр типу, який представляє тип елемента нового потоку.

картограф: Це параметр, який є неперешкоджаючою функцією без стану, яка застосовується до кожного елемента. Це породжує потік нових цінностей.

Коротко можна сказати, що метод flatMap() допомагає конвертувати Потік до Потік . Він виконує сплющування (розплющити або розплющити) і картографування (карта), одночасно. Метод Stream.flatMap() поєднує обидві операції, тобто плоский і мап.

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

Давайте розберемося в значенні сплющення.

Що таке сплющення?

Сплющення це процес перетворення кількох списків списків і об’єднання всіх цих списків для створення єдиного списку, що містить усі елементи з усіх списків.

завантажити youtube за допомогою vlc

Приклад зведення

Розглянемо наступні списки списків:

Перед зведенням: [[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() проти. Stream.map()

У наведеній нижче таблиці описано основні відмінності між Stream.flatMap() і Stream.map().

Метод flatMap() у Java 8
Stream.flatMap() Stream.map()
Він обробляє потік значень потоку. Він обробляє потік значень.
Він виконує відображення разом із зведенням. Він виконує лише відображення.
Він перетворює дані з Streamдо потоку. Він перетворює дані з потоку в потік.
Він використовує відображення один до багатьох. Він використовує відображення один до одного.
Його функція відображення створює кілька значень (потік значень) для кожного вхідного значення. Його функція відображення створює окремі значення для кожного вхідного значення.
Використовуйте метод flatMap(), коли функція відображення створює кілька значень для кожного вхідного значення. Використовуйте метод map(), коли функція Mapper створює окремі значення для кожного вхідного значення.