Collector

2022. 4. 21. 16:28·자바/스트림

1. Collector 구현하기

- Collector를 구현한다는 것은 Collector 인터페이스의 메서드를 가지고 구현한다는 것인데,

Collector 인터페이스는 아래와 같이 생겼다.

 

Public interface Collector<T, A, R>{

    Supplier<A>                supplier();

    // 작업 결과를 저장할 공간을 제공

 

    BiConsumer<A, T>        accumulator();

    // 스트림의 요소를 수집할 방법을 제공

 

    BinaryOperator<A>       combiner();

    // 두 저장공간을 병합할 방법을 제공(병렬 스트림)

 

    Function<A, R>            finisher();

    // 결과를 최종적으로 변환할 방법을 제공

 

    Set<Characteristics> characteristics();

    // Collector의 특성이 담긴 Set을 반환한다.

     ....

}

 

( 직접 구현해야 하는 것은 위 5개 메서드인데, characteristics()를 제외하면 모두 반환타입이

함수형 인터페이스이다. )

( 즉, 4개의 람다식을 사용하면 된다. )

 

( Characteristics()는 컬렉터가 수행하는 작업의 속성에 대한 정보를 제공하기 위한 것이다. )

( 그러므로, 아래의 속성 중에서 해당하는 것을 다음과 같이 Set에 담아 반환한다. )

 

(1) Characteristics.CONCURRENT

: 병렬로 처리할 수 있는 작업

 

(2) Characteristics.UNORDERED

: 스트림의 요소의 순서가 유지될 필요가 없는 작업

 

(3) Characteristics.IDENTITY_FINISH

: finisher()가 항등 함수인 작업

 

 

( 보통 정의하면 아래 코드처럼 수행하게 된다. )

 

Set<Characteristics> characteristics() {

       return Collections.unmodifiableSet(EnumSet.of(

                                Collector.Characteristics.CONCURRENT

                                Collector.Characteristics.UNORDERED

                ));

}

 

 

( 만약 비어있다고 하면, 아래 코드처럼 수행하면 된다. )

 

 

 

 

2. Collector를 이해하기 위한 예제(1)

: 아래의 코드를 Collector로 구현해보는 예제이다.

        ▼ 위 코드를 변환하면

 

'자바 > 스트림' 카테고리의 다른 글

collect() 메서드(3) - groupingBy()  (0) 2022.04.20
collect() 메서드(2) - partitioningBy()  (0) 2022.04.20
collect() 메서드(1)  (0) 2022.04.19
스트림의 최종 연산(조건 검사, 통계, 리듀싱)  (0) 2022.04.15
Optional<T>와 OptionalInt  (0) 2022.04.15
'자바/스트림' 카테고리의 다른 글
  • collect() 메서드(3) - groupingBy()
  • collect() 메서드(2) - partitioningBy()
  • collect() 메서드(1)
  • 스트림의 최종 연산(조건 검사, 통계, 리듀싱)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코드트리
      ServerSocket
      역직렬화
      outputstream
      안정 정렬
      유용한 클래스
      Arrays
      snail
      serializable
      Collections Framework
      문자 기반 스트림
      제자리 정렬
      중간연산
      InputStream
      java.lang패키지
      알고스팟
      코딩테스트
      file
      TCP 소켓 프로그래밍
      다형성
      안드로이드 스튜디오
      불안정 정렬
      선택 정렬
      java.time 패키지
      람다식
      map()
      자바 개념
      스트림
      소켓 프로그래밍
      코딩트리조별과제
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    Collector
    상단으로

    티스토리툴바