Sobes.tech
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> Преобразуване на всеки елемент в поток и обединяване