PHpullh
학습 라이브러리/Java/Stream 심화 — flatMap, groupingBy

JAVA · 컬렉션

Stream 심화 — flatMap, groupingBy

flatMap으로 중첩 구조를 평탄화하고 groupingBy로 그룹화합니다.

컬렉션고급StreamflatMapgroupingByCollectors

핵심 설명

flatMap으로 중첩 구조를 평탄화하고 groupingBy로 그룹화합니다.

Java code

import java.util.*;
import java.util.stream.*;

public class StreamAdvanced {
    record Order(String customer, List<String> items) {}

    public static void main(String[] args) {
        List<Order> orders = List.of(
            new Order("Alice", List.of("커피", "케이크")),
            new Order("Bob", List.of("녹차")),
            new Order("Alice", List.of("주스", "커피"))
        );

        // flatMap — 중첩 리스트 평탄화
        List<String> allItems = orders.stream()
            .flatMap(o -> o.items().stream())
            .distinct()
            .toList();
        System.out.println("전체 품목: " + allItems);

        // groupingBy — 그룹화
        Map<String, List<Order>> byCustomer = orders.stream()
            .collect(Collectors.groupingBy(Order::customer));
        System.out.println("고객별: " + byCustomer);

        // groupingBy + counting
        Map<String, Long> itemCount = orders.stream()
            .flatMap(o -> o.items().stream())
            .collect(Collectors.groupingBy(
                item -> item, Collectors.counting()));
        System.out.println("품목별 수: " + itemCount);

        // partitioningBy — true/false 분리
        Map<Boolean, List<String>> partition = allItems.stream()
            .collect(Collectors.partitioningBy(
                s -> s.length() > 2));
        System.out.println("2글자 초과 분리: " + partition);
    }
}

학습 팁

groupingBy의 두 번째 인자(downstream collector)로 counting(), summingInt(), mapping() 등을 조합하면 강력한 집계가 가능합니다.

주의할 점

flatMap에서 null 스트림을 반환하면 NullPointerException이 발생합니다. Stream.empty()를 반환하세요.

자주 묻는 질문

Stream 심화 — flatMap, groupingBy란 무엇인가요?

flatMap 으로 중첩 구조를 평탄화하고 groupingBy 로 그룹화합니다.

Stream 심화 — flatMap, groupingBy 학습 시 주의할 점은 무엇인가요?

flatMap 에서 null 스트림을 반환하면 NullPointerException 이 발생합니다. Stream.empty() 를 반환하세요.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.