Collector<T, A, R> — 가변 리덕션 연산 수집기
Collector<T, A, R> — 가변 리덕션 연산 수집기
입력 요소를 가변 결과 컨테이너(mutable result container) 에 축적하고, 모든 입력 요소를 처리한 후 축적된 결과를 선택적으로 최종 표현으로 변환하는 가변 리덕션(reduction) 연산을 나타내는 인터페이스예요. 순차 또는 병렬로 수행될 수 있어요.
본문
public interface Collector<T, A, R>
가변 리덕션 연산의 예로는 요소를 Collection에 축적하기, StringBuilder로 문자열 합치기, sum·min·max·average 같은 요소 요약 정보 계산, "판매자별 최대 거래액" 같은 피벗 테이블 요약 계산이 있어요. Collectors 클래스는 많은 일반적인 가변 리덕션의 구현을 제공해요.
Collector는 함께 작동해 항목을 결과 컨테이너에 축적하고 선택적으로 최종 변환을 수행하는 네 가지 함수로 명시돼요:
- 새 결과 컨테이너 생성 —
supplier() - 새 데이터 요소를 결과 컨테이너에 통합 —
accumulator() - 두 결과 컨테이너를 하나로 결합 —
combiner() - 컨테이너에 선택적 최종 변환 수행 —
finisher()
Collector는 또한 CONCURRENT 같은 특성(characteristics) 집합을 가지며, 이는 리덕션 구현이 더 나은 성능을 내도록 사용하는 힌트예요.
주요 메서드
supplier()— 새 결과 컨테이너를 만드는 함수를 반환해요.accumulator()— 요소를 결과 컨테이너로 접는 함수를 반환해요.combiner()— 두 결과 컨테이너를 병합하는 함수를 반환해요.finisher()— 결과 컨테이너에 최종 변환을 수행하는 함수를 반환해요.characteristics()— 이 컬렉터의 특성 집합을 반환해요.of(...)— 주어진 supplier·accumulator·combiner·characteristics로 새Collector를 반환해요 (정적 팩토리).Collectors.toList()등 —Collectors를 통해 흔히 사용돼요.
순차 실행은 supplier로 단일 결과 컨테이너를 만들어 각 요소마다 accumulator를 호출해요. 병렬 실행은 입력을 분할하고, 각 분할마다 결과 컨테이너를 만든 뒤 combiner로 부분 결과를 병합해요.
- 도입 시점(Since): 1.8