В JAVA 8 интерфейс Stream предоставляет методы map() и flatMap().
Метод map() принимает тип элемента нового потока и функцию сопоставления в качестве параметра и возвращает новый поток.
Метод map() всегда принимает функцию ввода и возвращает один вывод из каждого элемента потока.
Пример:
У нас есть список строк и все символы строки в нижнем регистре. Мы хотим преобразовать его в верхний регистр и напечатать.
В этом случае мы будем использовать метод map() для потока элементов.

В приведенном выше примере мы берем поток строк, сопоставляем их с методом верхнего регистра и собираем их в виде списка. Выводом будет APPLE,BANANA.
Метод flatMap() отображает поток элементов и сглаживает его. Метод flatmap() может принимать одно значение в качестве входных данных и может производить любое количество выходных данных.
Итак, если у нас есть список строк, и нам нужно отобразить всю строку в качестве вывода, то в этом случае мы будем использовать flatMap(), которая будет отображать (map()) все строки и разбивать весь список струны, сплющив его.

В приведенном выше примере у нас есть список из списка String, и нам нужно объединить все элементы в один список. В этом случае мы будем использовать flatMap(). Вывод будет [яблоко, банан, манго]