Stream flatMap (funktionsmapper) returnerer en strøm, der består af resultaterne af at erstatte hvert element i denne strøm med indholdet af en kortlagt strøm, der er produceret ved at anvende den medfølgende kortlægningsfunktion på hvert element. Stream flatMap(Function Mapper) er en mellemdrift . Disse operationer er altid dovne. Mellemliggende operationer påkaldes på en Stream-instans, og efter at de er færdige med deres behandling, giver de en Stream-instans som output.
Bemærk : Hver kortlagt strøm lukkes, efter dens indhold er blevet placeret i denne strøm. Hvis en kortlagt strøm er nul, bruges en tom strøm i stedet.
flatMap() V/s kort() :
1) kort() tager en Stream og transformerer den til en anden Stream. Den anvender en funktion på hvert element i Stream og gemmer returværdi i ny Stream. Det flader ikke strømmen ud. Men flatMap() er kombinationen af et kort og en flad operation, dvs. den anvender en funktion på elementer såvel som at flad dem.
2) kort() bruges kun til transformation, men flatMap() bruges til både transformation og fladning.
Syntaks:
< R>Strøm< R>flatMap(Funktion< ? super T, ? extends Stream< ? extends R>> mapper), hvor R er elementtypen for den nye strøm. Stream er en grænseflade, og T er typen af streamelementer. mapper er en tilstandsløs funktion, som anvendes på hvert element, og funktionen returnerer den nye strøm.>
Eksempel 1: flatMap() funktion med medfølgende kortlægningsfunktion.
// 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(antal)).> >forEach(System.out::println);> >}> }> |
>
>
Output:
5.6 7.4 4 1 2.3>
Eksempel 2: flatMap()-funktion med medfølgende operation af kortlægningsstreng med karakter ved position 2.
matrix multiplikation i c
// 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);> >}> }> |
>
>
Output:
e G e g>
Hvordan virker flatMap()?
Som allerede diskuteret i indlægget, at flatMap() er kombinationen af et kort og en flad operation, dvs. den anvender først kortfunktion og udjævner derefter resultatet. Lad os overveje nogle eksempler for at forstå, hvad præcist at udfladning af en strøm er.
Eksempel 1:
Listen før udfladning:
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>
Listen har 2 niveauer og består af 3 små lister. Efter udfladning bliver den omdannet til en niveaustruktur som vist:
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>
Eksempel 2:
Listen før udfladning:
[ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>
Listen har 3 niveauer og består af 4 små lister. Efter udfladning bliver den omdannet til én niveaustruktur som vist:
['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>
Kort sagt kan vi sige, at hvis der er en Stream af Liste over << Datatype >> før udfladning, derefter ved anvendelse af flatMap(), Strøm af << Datatype >> returneres efter udfladning.
Ansøgning :
latex skrifttype
// 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);> >}> }> |
>
>
Output:
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]>