Sobes.tech
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 е необходим, когато от един елемент трябва да се получат няколко, и е нужно "сплющване" на вложени структури.