JAVA4_12_스트림의 최종 연산2

charl hi·2021년 10월 11일
0

JAVA4

목록 보기
12/13

링크텍스트

collect()

  • Collector 인터페이스를 매개변수로 하는 스트림의 최종 연산
Object collect(Collector collector)
  • Collector collector : collect()에 필요한 메소드를 정의해 놓은 인터페이스

reduce() vs. collect()

공통점

  • 리듀싱 : reduce()를 수행한다.

차이점

reduce()

  • 스트림 전체를 리듀싱
  • 최종 연산

collect()

  • 그룹별 리듀싱



Collector 인터페이스

  • 수집(collect())에 필요한 메소드를 정의해 놓은 인터페이스

핵심은 supplier() & accumulator()!!

supplier()

  • 요소 T를 누적할 곳 == A

accumulator()

  • 요소 T를 어떻게 누적할 건지, 누적 수행 작업

combiner()

  • 병렬작업에서 각 쓰레드가 작업한 것들을 어떻게 병합할건지

finisher()

  • T -> A -> R로 최종변환

characteristics()

  • 컬렉터Collector의 특성이 담긴 Set 반환

  • 그럼 이것들을 우리가 직접 구현해야 하는가?? NO!!!
    -> Collectors!!



Collectors 클래스

  • 다양한 기능의 컬렉터(Collector)를 구현한 구현체를 제공하는 클래스

스트림을 컬렉션으로 변환

toList(), toSet(), toMap(), toCollection()


스트림을 배열로 변환

toArray() - 매개변수 없는

Student[] stuNames = studentStream.toArray(Student[]::new);	//(O)
Student[] stuNames = studentStream.toArray();	//(X)
Student[] stuNames = (Student[])sudentStream.toArray();	//(O)
Object[] stuNames = studentStream.toArray();	//(O)
  • ✨✨매개변수가 없는 toArray()는 Object[]를 반환한다.
    -> 자동형변환을 해주지 않기 때문에 2번이 안된다.

toArray(T[]::new) - 매개변수 있는

Student[] stuNames = studentStream.toArray(Student[]::new);	//(O)
Student[] stuNames = studentStream.toArray();	//(X)
Student[] stuNames = (Student[])sudentStream.toArray();	//(O)
Object[] stuNames = studentStream.toArray();	//(O)
  • 매개변수가 없는 toArray()를 따로 형변환을 해줄 바에야 매개변수가 있는 toArray()로 하는 게 편하다.
  • ✨✨매개변수가 있는 toArray()는 매개변수의 타입에 맞춰 반환한다.


스트림의 통계정보 제공

static counting()

  • 그룹별 count()
  • 여기서 import static java.util.Stream.Collectors.*; 로 했기 때문에 Collectors를 생략한 것
  • 원래라면 Collectors.counting() 이어야 한다.

summingInt()

  • 그룹별 sum()

maxBy(), minBy()

  • 그룹별 max(비교기준), min(비교기준)


스트림을 리듀싱

reducing()

Collector reducing(T identity, BinaryOperator<T> op)
  • 그룹별 리듀싱
  • BinaryOperator<T> op : accumulator, 누적작업
  • Function<T,U> mapper : T -> U 변환작업
  • 주로 두번째거!!!



문자열 스트림의 요소를 모두 연결

joining()




Ref

0개의 댓글