Streamovať plochú mapu (mapovač funkcií) vráti tok pozostávajúci z výsledkov nahradenia každého prvku tohto toku obsahom mapovaného toku vytvoreného aplikáciou poskytnutej mapovacej funkcie na každý prvok. Stream flatMap (mapovač funkcií) je medzioperačná prevádzka . Tieto operácie sú vždy lenivé. Medziľahlé operácie sú vyvolané na inštancii Stream a po dokončení spracovania poskytujú inštanciu Stream ako výstup.
Poznámka : Každý mapovaný tok sa po umiestnení jeho obsahu do tohto toku uzavrie. Ak má mapovaný tok hodnotu null, použije sa namiesto neho prázdny tok.
plochá mapa() V/s mapa() :
1) mapa() vezme prúd a transformuje ho na iný prúd. Aplikuje funkciu na každý prvok streamu a uloží návratovú hodnotu do nového streamu. Nesplošťuje potok. FlatMap() je však kombináciou mapy a plochej operácie, t. j. aplikuje funkciu na prvky a zároveň ich vyrovnáva.
2) mapa() sa používa iba na transformáciu, ale flatMap() sa používa na transformáciu aj sploštenie.
Syntax:
< R>Prúd< R>plochá mapa (Funkcia< ? super T, ? extends Stream< ? extends R>> mapper), kde R je typ prvku nového prúdu. Stream je rozhranie a T je typ prvkov toku. mapper je bezstavová funkcia, ktorá sa aplikuje na každý prvok a funkcia vráti nový prúd.>
Príklad 1: funkcia flatMap() s poskytnutou funkciou mapovania.
// 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);> >}> }> |
>
>
Výkon :
5.6 7.4 4 1 2.3>
Príklad 2: funkcia flatMap() s poskytnutou operáciou mapovacieho reťazca so znakom na pozícii 2.
príkaz sed
// 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);> >}> }> |
>
>
Výkon :
e G e g>
Ako funguje flatMap()?
Ako už bolo uvedené v príspevku, flatMap() je kombináciou mapy a plochej operácie, t.j. najprv aplikuje mapovú funkciu a potom vyrovná výsledok. Uvažujme o niekoľkých príkladoch, aby sme pochopili, čo presne je sploštenie prúdu.
Príklad 1:
Zoznam pred vyrovnaním:
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>
Zoznam má 2 úrovne a pozostáva z 3 malých zoznamov. Po vyrovnaní sa transformuje do jednoúrovňovej štruktúry, ako je znázornené:
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>
Príklad 2:
Zoznam pred vyrovnaním:
[ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>
Zoznam má 3 úrovne a pozostáva zo 4 malých zoznamov. Po vyrovnaní sa transformuje do jednoúrovňovej štruktúry, ako je znázornené:
['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>
V skratke môžeme povedať, že ak existuje a Prúd zoznamu << Dátový typ >> pred vyrovnaním, potom pri aplikácii flatMap(), Stream << Dátový typ >> sa vráti po sploštení.
Aplikácia:
base64 dekódovať v js
// 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);> >}> }> |
>
>
Výkon :
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]>