Junior — Middle
Каква е разликата между методите map и flatMap в Java Stream API и какви са техните особености при използване?
sobes.tech AI
Отговор от AI
Методите map и flatMap в API-то на Java Stream служат за преобразуване на елементи в поток, но работят по различен начин:
-
mapприема функция, която преобразува всеки елемент в друг елемент. В резултат получаваме поток с същия брой елементи, но от друг тип или вид. -
flatMapприема функция, която преобразува всеки елемент в поток (Stream) от елементи, и след това "изплъзва" ("сплющва") всички тези потоци в един общ поток. Това е полезно, когато от един елемент трябва да се получат няколко елемента.
Пример:
List<String> words = Arrays.asList("hello", "world");
// map: преобразуваме всяка дума в нейната дължина
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList()); // [5, 5]
// flatMap: разделяме всяка дума на букви и обединяваме всички букви в един поток
List<String> letters = words.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]
Характеристики на използване:
mapе подходящ за прости преобразувания на елементи един към един.flatMapе необходим, когато от един елемент трябва да се получат няколко, и е нужно "сплющване" на вложени структури.