Suoratoista litteää karttaa (toimintokartoittaja) palauttaa virran, joka koostuu tuloksista, jotka on saatu tämän virran kunkin elementin korvaamisesta kartoitetun virran sisällöllä, joka on tuotettu käyttämällä annettua kuvaustoimintoa jokaiseen elementtiin. Stream flatMap (Function Mapper) on välitoiminta . Nämä toiminnot ovat aina laiskoja. Välioperaatioita kutsutaan Stream-instanssissa, ja niiden käsittelyn päätyttyä ne antavat Stream-ilmentymän tulosteena.
Huomautus : Jokainen kartoitettu virta suljetaan sen jälkeen, kun sen sisältö on sijoitettu tähän streamiin. Jos yhdistetty stream on tyhjä, sen sijaan käytetään tyhjää virtaa.
flatMap() V/s kartta() :
1) kartta() ottaa streamin ja muuttaa sen toiseksi streamiksi. Se käyttää funktiota jokaisessa Stream-elementissä ja tallentaa palautusarvon uuteen streamiin. Se ei tasoita virtaa. Mutta flatMap() on yhdistelmä kartasta ja litteästä operaatiosta, eli se soveltaa funktiota elementteihin sekä tasoittaa niitä.
2) kartta() käytetään vain muuntamiseen, mutta flatMap():ta käytetään sekä muuntamiseen että tasoittamiseen.
Syntaksi :
< R>Striimaa< R>flatMap (toiminto< ? super T, ? extends Stream< ? extends R>> mapper), jossa R on uuden virran elementtityyppi. Stream on käyttöliittymä ja T on stream-elementtien tyyppi. Mapper on tilaton funktio, jota sovelletaan jokaiseen elementtiin ja funktio palauttaa uuden virran.>>Esimerkki 1: flatMap()-funktio mukana toimitetulla kartoitustoiminnolla.
// 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)).>> >}> }> |
>
Lähtö:
5.6 7.4 4 1 2.3>
Esimerkki 2: flatMap()-funktio, joka sisältää toiminnon kuvausmerkkijonolle, jonka merkki on kohdassa 2.
rivi vs sarake
// 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 ->>> 2>))).> >forEach(System.out::println);> >}> }> |
>
java pitkä merkkijonoon
>
Lähtö:
e G e g>
Miten flatMap() toimii?
Kuten viestissä jo todettiin, flatMap() on yhdistelmä kartasta ja tasaisesta operaatiosta, eli se käyttää ensin karttatoimintoa ja sitten tasoittaa tuloksen. Tarkastellaanpa joitain esimerkkejä ymmärtääksemme, mikä virran tasoittaminen on.
Esimerkki 1:
Lista ennen litistämistä:
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>
Listassa on 2 tasoa ja se koostuu 3 pienestä listasta. Tasoituksen jälkeen se muunnetaan yhdeksi tasorakenteeksi kuvan mukaisesti:
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>
Esimerkki 2:
Lista ennen litistämistä:
[ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>
Listassa on 3 tasoa ja se koostuu 4 pienestä listasta. Tasoituksen jälkeen se muunnetaan yhdeksi tasorakenteeksi kuvan mukaisesti:
['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>
Lyhyesti sanottuna voimme sanoa, että jos on a Stream of List of << Tietotyyppi >> ennen tasoitusta, sitten flatMap() Virta << Tietotyyppi >> palautetaan tasoituksen jälkeen.
Sovellus:
// 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);> >}> }> |
>
>
Lähtö:
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]>