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