Stream flatMap (mapovač funkcí) vrací proud sestávající z výsledků nahrazení každého prvku tohoto proudu obsahem mapovaného proudu vytvořeného aplikací poskytnuté mapovací funkce na každý prvek. Stream flatMap (mapovač funkcí) je střední provoz . Tyto operace jsou vždy líné. Mezilehlé operace jsou vyvolány na instanci Stream a poté, co dokončí své zpracování, poskytnou instanci Stream jako výstup.
Poznámka : Každý mapovaný stream je uzavřen poté, co byl jeho obsah umístěn do tohoto streamu. Pokud má mapovaný proud hodnotu null, použije se místo něj prázdný proud.
flatMap() V/s mapa() :
1) mapa() vezme Stream a transformuje ho na jiný Stream. Aplikuje funkci na každý prvek streamu a uloží návratovou hodnotu do nového streamu. Nevyrovnává potok. Ale flatMap() je kombinací mapy a ploché operace, tj. aplikuje funkci na prvky a také je zplošťuje.
2) mapa() se používá pouze pro transformaci, ale flatMap() se používá jak pro transformaci, tak pro zploštění.
Syntaxe:
< R>Proud< R>plochá mapa (Funkce< ? super T, ? extends Stream< ? extends R>> mapper), kde R je typ prvku nového proudu. Stream je rozhraní a T je typ prvků toku. mapper je bezstavová funkce, která je aplikována na každý prvek a funkce vrací nový proud.>
Příklad 1: funkce flatMap() s poskytnutou mapovací funkcí.
// 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ýstup :
5.6 7.4 4 1 2.3>
Příklad 2: funkce flatMap() s poskytnutou operací mapovacího řetězce se znakem na pozici 2.
sada 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);> >}> }> |
>
>
Výstup :
e G e g>
Jak flatMap() funguje?
Jak již bylo uvedeno v příspěvku, flatMap() je kombinací mapy a ploché operace, tj. nejprve aplikuje mapovou funkci a poté srovná výsledek. Podívejme se na několik příkladů, abychom pochopili, co přesně je zploštění proudu.
Příklad 1:
Seznam před zploštěním:
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>
Seznam má 2 úrovně a skládá se ze 3 malých seznamů. Po zploštění se transformuje do struktury jedné úrovně, jak je znázorněno:
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>
Příklad 2:
Seznam před zploštěním:
[ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>
Seznam má 3 úrovně a skládá se ze 4 malých seznamů. Po zploštění se transformuje do struktury jedné úrovně, jak je znázorněno:
['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>
Stručně řečeno, můžeme říci, že pokud existuje Proud seznamu << Datový typ >> před zploštěním a poté při použití flatMap(), Stream << Datový typ >> se po zploštění vrátí.
Aplikace :
// 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);> >}> }> |
>
32bitová architektura vs 64bitová
>
Výstup :
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]>