PHpullh
학습 라이브러리/Java/Collectors 활용

JAVA · 컬렉션

Collectors 활용

Collectors의 다양한 수집 전략으로 스트림 결과를 변환합니다.

컬렉션중급CollectorsjoiningtoMapsummarizing

핵심 설명

Collectors의 다양한 수집 전략으로 스트림 결과를 변환합니다.

Java code

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

public class CollectorsDemo {
    record Product(String name, String category, int price) {}

    public static void main(String[] args) {
        List<Product> products = List.of(
            new Product("노트북", "전자", 1500000),
            new Product("키보드", "전자", 80000),
            new Product("책", "도서", 25000),
            new Product("펜", "문구", 3000)
        );

        // joining
        String names = products.stream()
            .map(Product::name)
            .collect(Collectors.joining(", ", "[", "]"));
        System.out.println(names); // [노트북, 키보드, 책, 펜]

        // toMap
        Map<String, Integer> priceMap = products.stream()
            .collect(Collectors.toMap(Product::name, Product::price));

        // summarizingInt
        IntSummaryStatistics stats = products.stream()
            .collect(Collectors.summarizingInt(Product::price));
        System.out.printf("합계:%d, 평균:%.0f, 최대:%d%n",
            stats.getSum(), stats.getAverage(), stats.getMax());

        // groupingBy + downstream
        Map<String, IntSummaryStatistics> byCategory =
            products.stream().collect(
                Collectors.groupingBy(Product::category,
                    Collectors.summarizingInt(Product::price)));

        // collectingAndThen
        List<Product> unmodifiable = products.stream()
            .filter(p -> p.price() > 10000)
            .collect(Collectors.collectingAndThen(
                Collectors.toList(),
                Collections::unmodifiableList));
    }
}

학습 팁

Collectors.toMap()에서 키 충돌 시 merge function을 반드시 제공하세요. 없으면 IllegalStateException이 발생합니다.

주의할 점

Collectors.toList()는 가변 리스트를 반환합니다. 불변이 필요하면 .toList()(Java 16+)나 toUnmodifiableList()를 사용하세요.

자주 묻는 질문

Collectors 활용란 무엇인가요?

Collectors 의 다양한 수집 전략으로 스트림 결과를 변환합니다.

Collectors 활용 학습 시 주의할 점은 무엇인가요?

Collectors.toList() 는 가변 리스트를 반환합니다. 불변이 필요하면 .toList() (Java 16+)나 toUnmodifiableList() 를 사용하세요.