logo

Stream flatMap() in Java met voorbeelden

Stream flatMap (Functietoewijzer) retourneert een stroom die bestaat uit de resultaten van het vervangen van elk element van deze stroom door de inhoud van een toegewezen stroom die is geproduceerd door de meegeleverde toewijzingsfunctie op elk element toe te passen. Stream flatMap (Functietoewijzer) is een tussenliggende werking . Deze operaties zijn altijd lui. Tussenliggende bewerkingen worden aangeroepen op een Stream-instantie en nadat ze hun verwerking hebben voltooid, geven ze een Stream-instantie als uitvoer.

Opmerking : Elke in kaart gebrachte stream wordt gesloten nadat de inhoud ervan in deze stream is geplaatst. Als een toegewezen stream nul is, wordt in plaats daarvan een lege stream gebruikt.



flatMap() V/s kaart() :
1) kaart() neemt een Stroom en transformeert deze naar een andere Stroom. Het past een functie toe op elk element van Stream en slaat de geretourneerde waarde op in de nieuwe Stream. Het vlakt de stroom niet af. Maar flatMap() is de combinatie van een kaart en een platte bewerking, dat wil zeggen dat het een functie op elementen toepast en deze ook plat maakt.
2) kaart() wordt alleen gebruikt voor transformatie, maar flatMap() wordt gebruikt voor zowel transformatie als afvlakking.

Syntaxis:

 < R>Stroom< R>flatMap(Functie< ? super T, ? extends Stream< ? extends R>> mapper) waarbij R het elementtype van de nieuwe stream is. Stream is een interface en T is het type streamelementen. mapper is een staatloze functie die op elk element wordt toegepast en de functie retourneert de nieuwe stream.>

Voorbeeld 1 : flatMap()-functie met meegeleverde mapping-functie.








// 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 ->Stroom.van(aantal)).> >forEach(System.out::println);> >}> }>

>

>

Uitgang:

 5.6 7.4 4 1 2.3>

Voorbeeld 2: flatMap() functie met meegeleverde bewerking van mapping string met karakter op positie 2.

converteer tekenreeks naar jsonobject Java




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

>

>

Uitgang:

 e G e g>

Hoe werkt flatMap()?

Zoals al besproken in het bericht is flatMap() de combinatie van een kaart en een platte bewerking, dat wil zeggen dat het eerst de kaartfunctie toepast en vervolgens het resultaat vlak maakt. Laten we enkele voorbeelden bekijken om te begrijpen wat het afvlakken van een stroom precies is.
Voorbeeld 1 :
De lijst vóór het afvlakken:

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

De lijst heeft 2 niveaus en bestaat uit 3 kleine lijsten. Na het afvlakken wordt het getransformeerd in een structuur op één niveau, zoals weergegeven:

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

Voorbeeld 2:
De lijst vóór het afvlakken:

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

De lijst heeft 3 niveaus en bestaat uit 4 kleine lijsten. Na het afvlakken wordt het getransformeerd in een structuur op één niveau, zoals weergegeven:

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

Kortom, we kunnen zeggen dat als er een Stroom van Lijst van << Data type >> vóór het afvlakken, en vervolgens bij het toepassen van flatMap(), Stroom van << Data type >> wordt na het afvlakken teruggegeven.
Sollicitatie :




// 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 ->lijst.stream())>> >.collect(Collectors.toList());> > >System.out.println(>'The Structure after flattening is : '> +> >listofInts);> >}> }>

>

>

Uitgang:

verwijder het eerste teken excel
 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]>