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 메타데이터를 가집니다.