Middle
Каква е разликата между операциите map и flatMap?
sobes.tech AI
Отговор от AI
map преобразува всеки елемент на потока в нов елемент, връщайки поток с същия брой елементи.
flatMap преобразува всеки елемент на потока в поток от елементи и след това обединява тези вложени потоци в един плосък поток. Използва се, когато преобразуването на един елемент води до няколко елемента.
Пример:
Да предположим, че имаме списък от списъци със стрингове: List<List<String>> listOfLists.
Използване на map:
// Преобразува всеки списък със стрингове в неговия размер
listOfLists.stream()
.map(list -> list.size())
.forEach(System.out::println);
// Ще отпечата размерите на всеки вътрешен списък: 2, 3, 1 и т.н.
Използване на flatMap:
// Преобразува всеки списък със стрингове в поток от стрингове
// и ги обединява (изравнява) в един поток
listOfLists.stream()
.flatMap(list -> list.stream())
.forEach(System.out::println);
// Ще отпечата всички стрингове от всички вътрешни списъци: "a", "b", "c", "d", "e"...
Сравнителна таблица:
| Операция | Вход | Преобразуване | Изход | Цел |
|---|---|---|---|---|
map |
Stream<T> |
T -> R |
Stream<R> |
Преобразуване на всеки елемент |
flatMap |
Stream<T> |
T -> Stream<R> |
Stream<R> |
Преобразуване на всеки елемент в поток и обединяване |