[스터디]Java의 정석 28일차

Kristopher·2022년 2월 1일
0

Java 스터디

목록 보기
28/31

(CH14) 2.6 collect() ~ 2.8 스트림의 변환

collect()

collect()는 스트림의 최종 연산 중 가장 복잡하고 유용한 메서드이다. 스트림의 요소를 수집하여 다양한 결과를 볼 수 있다. 필요한 스트림의 요소를 어떻게 수집할 것인가를 정의한 것이 컬렉터이다. 컬렉터는 COllector인터페이스를 구현한 것으로, 직접 구현할 수도 있고 미리 작성된 것을 사용할 수도 있다.

collect() : 스트림의 최종 연산. 매개변수로 컬렉터를 필요로 한다.
Collector : 인터페이스. 컬렉터는 이 인터페이스를 구현해야 한다.
Collectors : 클래스. static메서드로 미리 작성된 컬렉터를 제공한다.

먼저 Collectors에 정의된 메서드들은 보자.

toList(), toSet(), toMap(), toCollection(), toArray() : 스트림을 컬렉션 배열로 변환
counting(), summingInt(), averageingInt(), maxBy(), minBy() : 통계치 연산
reducing() : 리듀싱
joining() : 문자열 결합
groupingBy(), partitionBy() : 그룹화와 분할 ( collect()가 유용한 이유)

Collector 구현하기

Collector인터페이스를 통해 구현해야 하는 메서드는 총 5개이다.

supplier() : 작업 결과를 저장할 공간을 제공
accumulator() : 스트림의 요소를 수집할 방법을 제공
combiner() : 두 저장공간을 병합할 방법을 제공
finisher() : 결과를 최종적으로 변환할 방법을 제공

위의 4개 메서드는 모두 반환 타입이 함수형 인터페이스이기 때문에 4개의 람다식을 작성하면 된다. 마지막으로 characteristics()가 있는데, 이는 컬렉터가 수행하는 작업의 속성에 대한 정보를 제공하기 위한 메서드이다.

Charcteristics.CONCURRENT : 병렬로 처리할 수 있는 작업
Charcteristics.UNORDERED : 스트림의 요소의 순서가 유지될 필요가 없는 작업
Charcteristics.IDENTITY_FINISH : finisher()가 항등함수인 작업

위의 3가지 속성 중에서 해당 되는 것을 Set에 담아 반환하도록 구현하면 된다.

Reference

Java의 정석
남궁성의 정석코딩

profile
개발자 지망생입니다.

0개의 댓글