Przesyłaj strumieniowo flatMap() w Javie z przykładami

Stream flatMap (mapa funkcji) zwraca strumień składający się z wyników zastąpienia każdego elementu tego strumienia zawartością zmapowanego strumienia utworzonego przez zastosowanie dostarczonej funkcji mapującej do każdego elementu. Stream flatMap (mapa funkcji) to plik operacja pośrednia . Te operacje są zawsze leniwe. Operacje pośrednie są wywoływane na instancji Stream i po zakończeniu przetwarzania dają instancję Stream jako wynik.

Notatka : Każdy zmapowany strumień jest zamykany po umieszczeniu jego zawartości w tym strumieniu. Jeśli zamapowany strumień ma wartość null, zamiast tego używany jest pusty strumień.

flatMap() V/s mapa() :
1) mapa() pobiera strumień i przekształca go w inny strumień. Stosuje funkcję na każdym elemencie Stream i przechowuje wartość zwracaną w nowym Streamie. Nie spłaszcza strumienia. Ale flatMap() jest kombinacją mapy i operacji płaskiej, tj. stosuje funkcję do elementów, a także je spłaszcza.
2) mapa() służy tylko do transformacji, ale flatMap() służy zarówno do transformacji, jak i spłaszczania.

Składnia:

  < R>Strumień < R>flatMap(funkcja < ? super T, ? extends Stream < ? extends R>> mapper), gdzie R jest typem elementu nowego strumienia. Stream to interfejs, a T to typ elementów strumienia. mapper to funkcja bezstanowa, która jest stosowana do każdego elementu i zwraca nowy strumień. 

Przykład 1 : Funkcja flatMap() z udostępnioną funkcją mapowania.




// 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 ->Strumień.of(num)).> > forEach(System.out::println);> > }> }>

Wyjście :

 5.6 7.4 4 1 2.3 

Przykład 2: Funkcja flatMap() z zapewnioną operacją mapowania ciągu znaków ze znakiem na pozycji 2.




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

Wyjście :

 e G e g 

Jak działa flatMap()?

Jak już wspomniano w poście, flatMap() jest kombinacją mapy i operacji płaskiej, tj. najpierw stosuje funkcję mapy, a następnie spłaszcza wynik. Rozważmy kilka przykładów, aby zrozumieć, czym dokładnie jest spłaszczanie strumienia.
Przykład 1 :
Lista przed spłaszczeniem:

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

Lista ma 2 poziomy i składa się z 3 małych list. Po spłaszczeniu zostaje przekształcony w strukturę jednopoziomową, jak pokazano:

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

Przykład 2:
Lista przed spłaszczeniem:

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

Lista ma 3 poziomy i składa się z 4 małych list. Po spłaszczeniu zostaje przekształcony w strukturę jednopoziomową, jak pokazano:

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

Krótko mówiąc, możemy powiedzieć, że jeśli istnieje Strumień listy < < Typ danych >> przed spłaszczeniem, a następnie po zastosowaniu flatMap(), Strumień < < Typ danych >> jest zwracany po spłaszczeniu.
Aplikacja :




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

Wyjście :

 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]