Sobes.tech
Middle

Kāda ir atšķirība starp operācijām map un flatMap?

sobes.tech AI

Atbilde no AI

map pārveido katru straumes elementu par jaunu elementu un atgriež tādu pašu elementu skaitu saturu straumi.

flatMap pārveido katru elementu par elementu straumi un pēc tam šos iebūvētos straumes apvieno vienā plakanā straumē. To izmanto, kad viena elementa pārveidošana noved pie vairākiem elementiem.

Piemērs:

Pieņemsim, ka mums ir saraksts ar sarakstiem ar virknes elementiem: List<List<String>> listOfLists.

map lietošana:

// Pārveido katru virknes sarakstu par tā lielumu
listOfLists.stream()
           .map(list -> list.size())
           .forEach(System.out::println);
// Izdrukā katra iekšējā saraksta lielumu: 2, 3, 1 un tā tālāk.

flatMap lietošana:

// Pārveido katru virknes sarakstu par straumi no šīs saraksta
// un apvieno tās (izlīdzina) vienā straumē
listOfLists.stream()
           .flatMap(list -> list.stream())
           .forEach(System.out::println);
// Izdrukā visas virknes no visiem iekšējiem sarakstiem: "a", "b", "c", "d", "e"...

Salīdzināšanas tabula:

Operācija Ievads Pārveidošana Izvads Mērķis
map Stream<T> T -> R Stream<R> Katras elementa pārveidošana
flatMap Stream<T> T -> Stream<R> Stream<R> Katra elementa pārveidošana uz straumi un apvienošana