Sobes.tech
Junior — Middle

რა განსხვავებაა map და flatMap მეთოდებს შორის Java Stream API-ში და რა არის მათი გამოყენების თავისებურებები?

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 საჭიროა, როდესაც ერთი ელემენტიდან რამდენიმე ელემენტი უნდა მიიღოს და სერიის შიგნით სტრუქტურების "ფლატირება" სჭირდება.