logo

Straumējiet flatMap() Java ar piemēriem

Straumēt flatMap (funkciju kartētājs) atgriež straumi, kas sastāv no katra šīs straumes elementa aizstāšanas rezultātiem ar kartētas straumes saturu, kas iegūts, katram elementam piemērojot nodrošināto kartēšanas funkciju. Stream flatMap (funkciju kartētājs) ir starpposma darbība . Šīs darbības vienmēr ir slinkas. Starpposma darbības tiek izsauktas Stream instancē, un pēc apstrādes pabeigšanas tās kā izvadi piešķir straumes gadījumu.

Piezīme : Katra kartētā straume tiek aizvērta pēc tam, kad tās saturs ir ievietots šajā straumē. Ja kartētās straumes vērtība ir nulle, tā vietā tiek izmantota tukša straume.



flatMap() V/s karte () :
1) karte () uzņem straumi un pārveido to par citu straumi. Tas piemēro funkciju katram straumes elementam un saglabā atgriešanas vērtību jaunajā straumē. Tas neizlīdzina straumi. Bet flatMap () ir kartes un plakanas darbības kombinācija, t.i., tā piemēro funkciju elementiem, kā arī tos saplacina.
2) karte () tiek izmantots tikai transformācijai, bet flatMap() tiek izmantots gan transformācijai, gan saplacināšanai.

Sintakse :

 < R>Straume< R>flatMap (Funkcija< ? super T, ? extends Stream< ? extends R>> kartētājs), kur R ir jaunās straumes elementa veids. Straume ir saskarne, un T ir straumes elementu veids. kartētājs ir bezstāvokļa funkcija, kas tiek lietota katram elementam, un funkcija atgriež jauno straumi.>> 

1. piemērs: flatMap() funkcija ar paredzēto kartēšanas funkciju.








// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'5.6'>,>'7.4'>,>'4'>,> >'1'>,>'2.3'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(num ->Stream.of(num)).>> forEach(System.out::println);> >}> }>

>

Izvade:

 5.6 7.4 4 1 2.3>

2. piemērs: FlatMap() funkcija ar paredzētu darbību kartēšanas virknei ar rakstzīmi 2. pozīcijā.

sql concat




// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'Geeks'>,>'GFG'>,> >'techcodeview.com'>,>'gfg'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(str ->>> Stream.of(str.charAt(>2>))).> >forEach(System.out::println);> >}> }>

>

>

Izvade:

 e G e g>

Kā darbojas flatMap()?

Kā jau minēts ziņojumā, flatMap () ir kartes un plakanas darbības kombinācija, t.i., vispirms tiek lietota kartes funkcija un pēc tam izlīdzināts rezultāts. Apskatīsim dažus piemērus, lai saprastu, kas īsti ir straumes saplacināšana.
1. piemērs:
Saraksts pirms saplacināšanas:

 [ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>

Sarakstam ir 2 līmeņi, un tas sastāv no 3 maziem sarakstiem. Pēc saplacināšanas tas tiek pārveidots par vienu līmeņa struktūru, kā parādīts attēlā:

virkne atrast c++
 [ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>

2. piemērs:
Saraksts pirms saplacināšanas:

 [ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>

Sarakstam ir 3 līmeņi, un tas sastāv no 4 maziem sarakstiem. Pēc saplacināšanas tas tiek pārveidots par vienu līmeņa struktūru, kā parādīts attēlā:

 ['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>

Īsāk sakot, mēs varam teikt, ka, ja ir a << saraksta straume Datu tips >> pirms saplacināšanas, pēc tam, lietojot flatMap(), << straume Datu tips >> tiek atgriezta pēc saplacināšanas.
Pieteikums:




// Java code for Stream flatMap(Function mapper)> import> java.util.*;> import> java.util.stream.Collectors;> > class> GFG> {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Creating a list of Prime Numbers> >List PrimeNumbers = Arrays.asList(>5>,>7>,>11>,>13>);> > >// Creating a list of Odd Numbers> >List OddNumbers = Arrays.asList(>1>,>3>,>5>);> > >// Creating a list of Even Numbers> >List EvenNumbers = Arrays.asList(>2>,>4>,>6>,>8>);> > >List listOfListofInts => >Arrays.asList(PrimeNumbers, OddNumbers, EvenNumbers);> > >System.out.println(>'The Structure before flattening is : '> +> >listOfListofInts);> > >// Using flatMap for transformating and flattening.> >List listofInts = listOfListofInts.stream()> >.flatMap(list ->list.stream())>> >.collect(Collectors.toList());> > >System.out.println(>'The Structure after flattening is : '> +> >listofInts);> >}> }>

>

>

Izvade:

 The Structure before flattening is : [[5, 7, 11, 13], [1, 3, 5], [2, 4, 6, 8]] The Structure after flattening is : [5, 7, 11, 13, 1, 3, 5, 2, 4, 6, 8]>