Stream flatMap(Function mapper) returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Stream flatMap(Function mapper) is an intermediate operation. These operations are always lazy. Intermediate operations are invoked on a Stream instance and after they finish their processing, they give a Stream instance as output.
Note : Each mapped stream is closed after its contents have been placed into this stream. If a mapped stream is null, an empty stream is used, instead.
flatMap() V/s map() :
1) map() takes a Stream and transform it to another Stream. It applies a function on each element of Stream and store return value into new Stream. It does not flatten the stream. But flatMap() is the combination of a map and a flat operation i.e, it applies a function to elements as well as flatten them.
2) map() is used for transformation only, but flatMap() is used for both transformation and flattening.
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) where, R is the element type of the new stream. Stream is an interface and T is the type of stream elements. mapper is a stateless function which is applied to each element and the function returns the new stream.
Example 1 : flatMap() function with provided mapping function.
5.6 7.4 4 1 2.3
Example 2 : flatMap() function with provided operation of mapping string with character at position 2.
e G e g
How does flatMap() work ?
As already discussed in the post that flatMap() is the combination of a map and a flat operation i.e, it first applies map function and than flattens the result. Let us consider some examples to understand what exactly flattening a stream is.
Example 1 :
The list before flattening :
[ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]
The list has 2 levels and consists of 3 small lists. After Flattening, it gets transformed into “one level” structure as shown :
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]
Example 2 :
The list before flattening :
[ ["G", "E", "E"], ["K", "S", "F"], ["O", "R", "G"], ["E", "E", "K", "S"] ]
The list has 3 levels and consists of 4 small lists. After Flattening, it gets transformed into “one level” structure as shown :
["G", "E", "E", "K", "S", "F", "O", "R", "G", "E", "E", "K", "S"]
In short, we can say that if there is a Stream of List of <<Data Type>> before flattening, then on applying flatMap(), Stream of <<Data Type>> is returned after flattening.
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]
Attention reader! Don’t stop learning now. Get hold of all the important Java and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.
- IntStream flatMap(IntFunction mapper) in Java
- DoubleStream flatMap(DoubleFunction mapper) in Java
- LongStream flatMap(LongFunction mapper) in Java
- Character Stream Vs Byte Stream in Java
- Difference between Stream.of() and Arrays.stream() method in Java
- foreach() loop vs Stream foreach() vs Parallel Stream foreach()
- Stream skip() method in Java with examples
- Stream.reduce() in Java with examples
- Stream.max() method in Java with Examples
- Stream min() method in Java with Examples
- Stream generate() method in Java with examples
- Stream count() method in Java with examples
- Stream.of(T... values) in Java with examples
- Stream.of(T t) in Java with examples
- Stream peek() in Java with examples
- Stream map() in Java with examples
- Stream mapToInt() in Java with examples
- Stream mapToLong() in Java with examples
- Stream mapToDouble() in Java with examples
- Stream allMatch() in Java with examples
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.