logo

Pretakajte flatMap() v Javi s primeri

Stream flatMap (preslikava funkcij) vrne tok, sestavljen iz rezultatov zamenjave vsakega elementa tega toka z vsebino preslikanega toka, proizvedenega z uporabo ponujene funkcije preslikave za vsak element. Stream flatMap(Function mapper) je vmesno delovanje . Te operacije so vedno lene. Vmesne operacije se prikličejo na instanci Stream in potem, ko končajo obdelavo, dajo kot izhod primerek Stream.

Opomba : Vsak preslikan tok se zapre, ko je njegova vsebina postavljena v ta tok. Če je preslikani tok nič, se namesto tega uporabi prazen tok.



flatMap() V/s zemljevid() :
1) zemljevid() vzame tok in ga pretvori v drug tok. Uporabi funkcijo za vsak element toka in shrani vrnjeno vrednost v nov tok. Toka ne splošči. Toda flatMap() je kombinacija zemljevida in ravne operacije, tj. uporablja funkcijo za elemente in jih splošči.
2) zemljevid() se uporablja samo za transformacijo, vendar se flatMap() uporablja tako za transformacijo kot za izravnavo.

Sintaksa:

 < R>Tok< R>flatMap(funkcija< ? super T, ? extends Stream< ? extends R>> preslikava), kjer je R tip elementa novega toka. Tok je vmesnik in T je vrsta elementov toka. Mapper je funkcija brez stanja, ki se uporabi za vsak element in funkcija vrne nov tok.>

Primer 1: funkcija flatMap() s priloženo funkcijo preslikave.








// 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);> >}> }>

>

>

Izhod:

 5.6 7.4 4 1 2.3>

Primer 2: funkcija flatMap() z zagotovljeno operacijo preslikave niza z znakom na položaju 2.

filtriranje python




// 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);> >}> }>

>

>

Izhod:

 e G e g>

Kako deluje flatMap()?

Kot smo že razpravljali v objavi, je flatMap() kombinacija zemljevida in ravne operacije, tj. najprej uporabi funkcijo zemljevida in nato splošči rezultat. Oglejmo si nekaj primerov, da bi razumeli, kaj točno je izravnavanje toka.
Primer 1:
Seznam pred sploščitvijo:

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

Seznam ima 2 ravni in je sestavljen iz 3 majhnih seznamov. Po sploščitvi se preoblikuje v strukturo ene ravni, kot je prikazano:

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

Primer 2:
Seznam pred sploščitvijo:

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

Seznam ima 3 ravni in je sestavljen iz 4 majhnih seznamov. Po sploščitvi se preoblikuje v strukturo ene ravni, kot je prikazano:

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

Skratka, lahko rečemo, da če obstaja Tok seznama << Vrsta podatkov >> pred sploščitvijo, nato ob uporabi flatMap(), Tok << Vrsta podatkov >> se vrne po izravnavi.
Uporaba:




// 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);> >}> }>

>

java lambda izrazi
>

Izhod:

 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]>