collect() & Collectors
collect() 스트림 최종 연산
Object collect(Collector collector)
collect()
는 Collector 를 매개변수로 하는 스트림의 최종 연산
- 최종 연산
- collect() : 그룹별 리듀싱
- reduce() : 전체 리듀싱
Collector 인터페이스
public interface Collector<T, A, R> {}
- 수집 (collect) 에 필요한 메서드를 정의해 놓은 인터페이스
- 직접 구현하는 일이 거의 없다 (Collectors 클래스 사용)
Collectors 클래스
- 다양한 기능의 컬렉터(Collector 를 구현한 클래스) 를 제공
- 변환
mapping()
toList()
toSet()
toMap()
toCollection()
- 통계
counting()
summingInt()
averagingInt()
maxBy()
minBy()
summarizingInt()
- 문자열 결합
- 리듀싱
- 그룹화와 분할
groupingBy()
partitioningBy()
collectingAndThen()
스트림을 컬렉션, 배열로 변환
스트림을 컬렉션으로 변환
toList()
toSet()
toMap()
toCollection()
List<String> names = stuStream.map(Student::getName)
.collect(Collectors.toList());
스트림을 배열로 변환
Student[] stuNames = studentStream.toArray(Student[]::new);
Student[] stuNames = studentStream.toArray();
Object[] stuNames = studentStream.toArray();
스트림의 통계
스트림의 통계 정보 제공
counting()
summingInt()
maxBy()
minBy()
long count = stuStream.count();
long count = stuStream.collect(counting());
long totalScore = stuStream.mapToInt(Student::getTotalScore).sum();
long totalScore = stuStream.collect(summingInt(Student::getTotalScore));
스트림을 리듀싱
reducing()
Collector reducing(T identity, BinaryOperator<T> op)
joining()
String studentNames = stuStream.map(Student::getName).collect(joining());
String studentNames = stuStream.map(Student::getName).collect(joining(","));
스트림의 그룹화와 분할
Map<Boolean, List<Student>> stuBySex = stuStream
.collect(partitioningBy(Student::isMale));
Map<Integer, List<Student>> stuByBan = stuStream
.collect(groupingBy (Student::getBan, toList()));