collect() 메서드(1)

2022. 4. 19. 16:54·자바/스트림

1. collect() 메서드란?

- 스트림의 요소를 수집하는 최종 연산으로 앞서 배운 리듀싱과 유사하다.

 

- 어떻게 수집할 것인지에 대한 방법이 정의되어 있는 Collector가 있다.

 

- Collector 인터페이스로 직접 구현도 가능하고 미리 작성된 Collectors 클래스를 사용할 수 있다.

 

- collect() 메서드의 매개변수는 Collector를 필요로 한다. 즉, Collector를 구현한 클래스의 객체

이어야 한다는 뜻이다.

( 마치 sort() 메서드 위해서 Comparator가 필요한 것처럼 )

 

 

Object collect(Collector collector)

Object collect(Supplier supplier, BiConsumer accumlator, BiConsumer combiner)

 

( 매개변수가 3개나 정의된 메서드는 잘 쓰이지 않지만, Collector 인터페이스를 구현하지 않고

람다식으로 처리하는 경우 매우 편리하다. )

 

 

 

 

2. 스트림을 컬렉션과 배열로 변환 - toList(), toSet(), toMap(), toCollection(), toArray()

- 스트림의 모든 요소를 컬렉션에 수집하려면, Collectors 클래스의 toList()와 같은 메서드를

사용하면 된다. 아래의 예시를 보자.

 

 

 

- List나 Set이 아닌 특정 컬렉션이라면, toCollection()에 해당 컬렉션의 생성자 참조를 매개변수로 넣어주면

된다. 아래의 예시를 보자.

 

 

 

- Map은 키와 값의 쌍으로 저장해야하므로 객체의 어떤 필드를 키로 사용할지와 값으로 사용하지

지정해주어야 한다.아래의 예시를 보자.

 

// Person을 초기화하는 p->p에서 Function.indentity()를 쓸 수도 있다.

 

 

 

- 스트림에 저장된 요소들을 'T[]' 타입의 배열로 변환하려면, toArray()를 사용하면 된다.

단, 해당 타입의 생정자 참조를 매개변수로 지정해주어야 한다. 만약 그렇지 않을 경우,

'Object[]'가 반환된다.

 

ex)

Student[] stuNames = studentStream.toArray(Student::new);   //컴파일 성공

Student[] stuNames = studentStream.toArray();   //에러 방생

Object[] stuNames = studentStream.toArray();   //컴파일 성공

 

 

 

 

 

3. 통계 - counting(), summingInt(), averagingInt(), maxBy(), minBy()

-  다음 collect() 메서드(2)에서 배울 groupingBy()와 함께 사용할 때 이 메서드들이 필요로

하기 때문에, 간단하게 사용 방법을 살펴본다.

( 간략히 하기 위해서 Collectors를 import static을 하였다. )

 

 

 

 

4. 리듀싱 - reducing()

- IntStream에는 매개변수 3개짜리 collect()만 정의되어 있으므로 boxed()를 통해 IntStream을 Stream<Integer>

로 변환해야 매개변수 1개짜리 collect()를 쓸 수 있다.

 

- 아래의 예제를 보고 확실히 이해하자.

 

 

 

 

5. 문자열 결합 - joining()

- 문자열 스트림의 모든 요소를 하나의 문자열로 연결해서 반환한다.

 

- 구분자를 지정해줄 수도 있고, 접두사와 접미사도 지정가능하다.

 

- 주의할 점은 스트림의 요소가 String이나 StringBuffer처럼 Char Sequence의 자손인 경우에만

결합이 가능하다.

 

( 만약 그렇치 않을 경우, map()을 이용해서 변환 후 사용해야 한다. )

 

( 아래의 예제를 보고 확실히 이해하자. )

( 만약 map()을 뺴 버린다면, 해당 스트림의 클래스에 있는 toString()과 결합하게 된다. )

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

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

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    collect() 메서드(1)
    상단으로

    티스토리툴바