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() 를 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.