위클리페이퍼 2 - Stream API의 map과 flatMap의 차이점
2025. 4. 13. 18:22

🇶 Stream API의 map과 flatMap의 차이점을 설명하고, 각각의 활용 사례를 예시 코드와 함께 설명해주세요.

 

Stream API

: java 8 부터 추가된 기능, 컬렉션에 저장된 엘리먼트들을 하나씩 순회하면서 처리한다.

스트림 파이프라인

1단계) 생성 : 소스 → 생성

  • 데이터의 원천 (예: Collection, 배열, I/O 채널 등)

2단계) 중간 연산(Intermediate Operations) : 가공(매핑, 필터링..)

  • 스트림을 변환하거나 연산함.
  • 각 연산은 새로운 스트림을 반환하며, 여러 연산을 메서드 체인 형태로 연결 가능.
  • 주의‼️ 스트림의 중간 연산은 최종 연산이 호출되기 전까지 실제로(런타임) 실행되지 않음

3단계) 최종 연산(Terminal Operations) : 결과

  • 스트림 파이프라인을 종료하고 결과를 반환
  • 최종 연산이 호출되어야 중간 연산들이 실제로 실행됨!! 

 

Map() vs FlatMap()

Map()은 각각의 요소를 다른 obj로 변환한다. 함수를 인자로 받아서 함수안에 있는 변환 로직을 받아 실행한다. 

List<String> titles = Arrays.asList("java basics", "programming principles", "data structures");
List<String> capitalizedTitles = titles.stream()
        .map(title -> title.substring(0, 1).toUpperCase() + title.substring(1))
        .toList();
System.out.println(capitalizedTitles);

// Output: [Java basics, Programming principles, Data structures]

 

FlatMap()은 2차원 리스트를 1차원으로 변환하는데 사용된다. 

ex) 문자열 리스트에서 단어만 추출하기

List<String> sentences = Arrays.asList("I love Java", "Stream API is powerful");

List<String> words = sentences.stream()
    .flatMap(sentence -> Arrays.stream(sentence.split(" ")))
    .collect(Collectors.toList());

System.out.println(words);
// 출력: [I, love, Java, Stream, API, is, powerful]

Reference 

https://medium.com/@reetesh043/java-stream-map-vs-flatmap-60a10e666c75

큣큣
큣큣