Sobes.tech
Junior — Middle

Kāda ir atšķirība starp map un flatMap metodēm Java Stream API un kādas ir to lietošanas īpatnības?

sobes.tech AI

Atbilde no AI

Java Stream API map un flatMap metodes ir kalpo elementu pārveidošanai plūsmā, bet darbojas dažādi:

  • map pieņem funkciju, kas katru plūsmas elementu pārveido par citu elementu. Rezultātā iegūstam plūsmu ar tādu pašu elementu skaitu, bet ar citu tipu vai izskatu.

  • flatMap pieņem funkciju, kas katru elementu pārveido par plūsmu (Stream) elementu, un pēc tam šīs plūsmas ("plakanas") apvieno vienā kopīgā plūsmā. Tas ir noderīgi, ja no viena elementa nepieciešams iegūt vairākus elementus.

Piemērs:

List<String> words = Arrays.asList("hello", "world");

// map: pārveido katru vārdu tā garumā
List<Integer> lengths = words.stream()
    .map(String::length)
    .collect(Collectors.toList()); // [5, 5]

// flatMap: sadala katru vārdu pa burtiem un apvieno visus burtus vienā plūsmā
List<String> letters = words.stream()
    .flatMap(word -> Arrays.stream(word.split("")))
    .collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]

Lietošanas īpatnības:

  • map ir piemērots vienkāršiem elementu pārveidojumiem pa vienam.
  • flatMap ir nepieciešams, ja no viena elementa jāiegūst vairāk un ir jā"izlīdzina" iekšējās struktūras.