Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա Java Stream API-ում map և flatMap մեթոդների միջև և ինչպիսի՞ն են նրանց օգտագործման առանձնահատկությունները։

sobes.tech AI

Պատասխան AI-ից

Java Stream API-ի map և flatMap մեթոդները ծառայում են տարրերի փոխակերպման համար, բայց տարբեր կերպ են աշխատում.

  • 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-ը անհրաժեշտ է, երբ մի տարրից պետք է ստանալ մի քանի և անհրաժեշտ է "փափուկացնել" ներսի կառուցվածքները։