Skip to main content

Command Palette

Search for a command to run...

[ Java ] Stream Api의 map vs flatMap

Updated
1 min readView as Markdown
[ Java ] Stream Api의 map vs flatMap
S

Nice to meet u :) Im Backend Developer

목표 : Stream API의 map과 flatMap의 차이점과 각각의 활용 사례를 예시 코드와 함께 확인해보자.

1️⃣StreamApi의 Map ?

먼저 코드를 통해 확인하자.

//Map
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<Integer> list=Stream.of(br.readline()
                                            .split(" ")).map(Integer::parseInt)
                                            .toList();
        System.out.println(list.toString());
    }
}
  1. Stream.of를 통해 Stream을 생성해줍니다.

  2. map을 통해 입력받은 숫자들을 Integer.parseInt를 적용해서 int로 바꿔줍니다. 즉, map을 통해 원하는 요소를 뽑아낼 수 있습니다.

  3. 사례:단순 데이터 변환


2️⃣ Stream Api 의 flatMap?

public class Main {

    public static void main(String[] args) throws IOException {

        List<List<Integer>> nestedList = Arrays.asList(
          Arrays.asList(1, 2, 3),
          Arrays.asList(4, 5, 6),
          Arrays.asList(7, 8, 9)
        );
        List<Integer> listWithFlatMap = nestedList.stream()
                                                  .flatMap(List::stream)
                                                  .toList();
        System.out.println(listWithFlatMap.toString());
    }
}
  1. nestedList.stream()을 통해 스트림을 생성해준다.

  2. flatMap(List::stream)을 통해서 내부의 리스트를 개별 스트림으로 변환해준다. → 모든 요소들을 하나로 합친 단일 스트림으로 반환한다.

  3. 그 후 결과는 [1,2,3,4,5,6,7,8,9] 가 나온다.

  4. 사례: 중첩 컬렉션 처리, Optional체이닝, 다대다 관계 처리

⚡ 정리

차이점
Map : map()은 스트림의 각 요소를 변환하여 새로운 요소로 매핑한다.

flatMap : 각 요소를 스트림으로 변환한 후, 모든 스트림을 하나의 스트림으로 평면화한다.

(출처 : https://observerlife.tistory.com/98, https://s7won.tistory.com/5)

More from this blog

[Spring] N+1문제 발생과 분석

✍️ 작성하게 된 이유 옷을 관리하는 서비스를 개발하면서 Cloth 엔티티와 그에 연관된 ClothWithAttributes, Attribute 데이터를 함께 조회하는 기능이 필요했다.그런데 연관 데이터를 조회할 때마다 쿼리가 폭발적으로 증가(N+1 문제) 하며, 성능이 급격히 저하되는 상황을 마주하게 되었다. Spring JPA의 대표적인 문제로 N+1임을 알고있었지만, 해결하는 방법은 Fetch Join밖에 몰랐다. 지연로딩되는 필드를 엔티...

Sep 17, 20256 min read
[Spring] N+1문제 발생과 분석

데이터베이스 기본 개념 정리

1️⃣ 데이터베이스(DB) & DBMS DB (Database): 일정한 규칙(스키마)에 따라 구조화되어 저장된 데이터의 집합. DBMS (Database Management System): DB를 제어/관리하는 시스템 소프트웨어. 특징: 실시간 접근 가능, 동시 공유 가능. 구조: 데이터베이스 → DBMS → 응용 프로그램 → 사용자 2️⃣ 엔티티(Entity) & 릴레이션(Relation) 엔티티: 여러 속성을 가진 "개체"...

Aug 5, 20252 min read
데이터베이스 기본 개념 정리

[Project] 날씨에 맞는 옷 추천 서비스 : 지그재그 크롤링 여정 기록 (1) ChromeDriver를 EC2에 설치하기

✍️ 작성하게 된 이유 무신사, 29cm는 Jsoup으로 충분히 크롤링이 가능했기 때문에, ZigZag도 당연히 Jsoup으로 처리될 것이라 생각했다. 무신사, 29cm와 마찬가지로 필요한 데이터는 모두 <script> 태그 안에 들어있었다. 하지만… 예상은 보기 좋게 빗나갔다. 🧪 현상 ✅ 로컬 크롤링 → 정상 작동 Jsoup으로 script 태그 내에서 대표 이미지와 상품명을 잘 추출 로컬 환경에서는 아무 문제 없이 작동 ❌ A...

Jul 30, 20253 min read
[Project] 날씨에 맞는 옷 추천 서비스 : 지그재그 크롤링 여정 기록 (1) ChromeDriver를 EC2에 설치하기

[Project] 날씨에 맞는 옷 추천 프로젝트: Selenium은 정말 필요한 선택이었을까? - 크롤링 삽질 기록

✍️ 작성하게 된 이유 날씨에 따라 옷을 추천해주는 서비스를 만들면서, 사용자가 입력한 구매 링크에서 옷 정보( 대표이미지, 상품명 )를 불러오는 기능이 필요했다. 처음에 해당 페이지를 동적 페이지로 판단했고, 자연스럽게 Selenium을 도입했다. 하지만 이 결정이 과연 최선이었는지는 수많은 시행착오 끝에야 알 수 있었다. 🕸️ Selenium을 선택한 이유 동적 페이지는 Jsoup으로 크롤링이 어렵다는 인식으로 처음부터 Selenium을 ...

Jul 28, 20254 min read
[Project] 날씨에 맞는 옷 추천 프로젝트: Selenium은 정말 필요한 선택이었을까? - 크롤링 삽질 기록

Soyulia's Blog

49 posts