Perfect πŸ‘ β€” here’s a visual diagram showing how .map() and .flatMap() work in Java Streams.

Visualizing .map() vs .flatMap()1️⃣ .map() β€” One-to-One Transformation
コードをコピー
Input Stream:   [ "apple", "banana" ]

.map(String::length)
       β”‚
       β–Ό
Output Stream:  [ 5, 6 ]
  • Each element β†’ exactly one transformed element
  • Result: Stream<Integer>
  • No flattening happens.
2️⃣ .flatMap() β€” One-to-Many Transformation + Flattening
コードをコピー
Input Stream:   [ "apple banana", "cherry date" ]

.flatMap( phrase -> Arrays.stream(phrase.split(" ")) )
       β”‚
       β–Ό
Intermediate:   [ Stream("apple","banana"), Stream("cherry","date") ]
       β”‚
       β–Ό (flatten)
Output Stream:  [ "apple", "banana", "cherry", "date" ]
  • Each element β†’ multiple elements (via a sub-stream)
  • Flattened into a single stream
  • Result: Stream<String> without nesting.
Side-by-Side Summary
コードをコピー
.map()      : Stream<T> β†’ Stream<R>
.flatMap()  : Stream<T> β†’ Stream<R> (flattened from Stream<Stream<R>>)
Code RecapJava

コードをコピー
import java.util.*;
import java.util.stream.*;

public class MapFlatMapVisual {
    public static void main(String[] args) {
        // map example
        List<Integer> lengths = Arrays.asList("apple", "banana").stream()
            .map(String::length)
            .collect(Collectors.toList());
        System.out.println("map() result: " + lengths); // [5, 6]

        // flatMap example
        List<String> words = Arrays.asList("apple banana", "cherry date").stream()
            .flatMap(s -> Arrays.stream(s.split(" ")))
            .collect(Collectors.toList());
        System.out.println("flatMap() result: " + words); // [apple, banana, cherry, date]
    }
}

If you want, I can also give you a cheat sheet of the most common .map() and .flatMap() patterns in Java so you can quickly pick the right one in real projects.

Do you want me to prepare that cheat sheet?

← Back to Learning Journey