logo

Streama flatMap() i Java med exempel

Stream flatMap (Funktionsmappare) returnerar en ström som består av resultaten av att ersätta varje element i denna ström med innehållet i en mappad ström producerad genom att tillämpa den tillhandahållna mappningsfunktionen på varje element. Stream flatMap(Function mapper) är en mellandrift . Dessa operationer är alltid lata. Mellanliggande operationer anropas på en Stream-instans och efter att de avslutat sin bearbetning ger de en Stream-instans som utdata.

Notera : Varje mappad ström stängs efter att dess innehåll har placerats i denna ström. Om en mappad ström är null används en tom ström istället.



flatMap() V/s Karta() :
1) Karta() tar en ström och omvandlar den till en annan ström. Den tillämpar en funktion på varje element i Stream och lagrar returvärde i nya Stream. Det plattar inte strömmen. Men flatMap() är kombinationen av en karta och en platt operation, det vill säga att den tillämpar en funktion på element såväl som att platta till dem.
2) Karta() används endast för transformation, men flatMap() används för både transformation och utjämning.

Syntax :

 < R>Ström< R>flatMap(Funktion< ? super T, ? extends Stream< ? extends R>> mapper) där R är elementtypen för den nya strömmen. Stream är ett gränssnitt och T är typen av streamelement. mapper är en tillståndslös funktion som appliceras på varje element och funktionen returnerar den nya strömmen.>

Exempel 1: flatMap() funktion med tillhandahållen mappningsfunktion.








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

>

>

Utgång:

 5.6 7.4 4 1 2.3>

Exempel 2: flatMap() funktion med tillhandahållen operation av mappningssträng med tecken på position 2.

java cast char till sträng




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

>

>

Utgång:

 e G e g>

Hur fungerar flatMap()?

Som redan diskuterats i inlägget att flatMap() är kombinationen av en karta och en platt operation, det vill säga att den först applicerar kartfunktion och sedan plattar ut resultatet. Låt oss överväga några exempel för att förstå exakt vad det är att tillplatta en bäck.
Exempel 1:
Listan före plattning:

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

Listan har 2 nivåer och består av 3 små listor. Efter tillplattning omvandlas den till en nivåstruktur som visas:

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

Exempel 2:
Listan före plattning:

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

Listan har 3 nivåer och består av 4 små listor. Efter tillplattning omvandlas den till en nivåstruktur som visas:

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

Kortfattat kan vi säga att om det finns en Ström av Lista över << Data typ >> före plattning, sedan när du applicerar flatMap(), Ström av << Data typ >> återlämnas efter tillplattning.
Ansökan :




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

grunderna i java
>

>

Utgång:

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