<Lambda> 6. JAVA8 in Action - Chapter 6
by BFine반응형
JAVA8 in Action - part2
Chapter 6 - 스트림으로 데이터 수집
6.1.0 정리
- 중간연산 은 한 스트림을 다른 스트림으로 변환하는 연산으로 여러 연산을 연결 할 수 있다.
- 최종연산 은 스트림의 요소를 소비해 최종 결과 를 도출한다.
6.1.1 컬렉터란 무엇인가
- 함수형 프로그래밍에서는 무엇을 원하는지 직접 명시할 수 있어서 방법을 신경 쓸 필요가 없다.
- 함수형 API 장점은 조합성 과 재사용성
- 데이터들을 가로로 된 스트림이라는 통에 집어넣고 세로로 연산을 수행해 결과를 추출해서 자료구조에 저장해둔다.
6.1.2 미리 정의된 컬렉터
Collectors
에서 제공하는 메서드 기능- 스트림 요소를 하나의 값으로 리듀스하고 요약
- 요소 그룹화
- 요소 분할
6.2.0 리듀싱과 요약
- 컬렉터 로 스트림의 항목을 컬렉션으로 재구성 할 수 있다.
6.2.1 스트림값에서 최댓값 최소값 검색
- Collectors 클래스에는
maxBy
,minBy
개의 메서드가 있다.
6.2.2 요약 연산
summingInt
,averagingInt
는 객체를 int로 매핑하는 함수를 인수로 받아 값을 구하는 메서드 이다.- 합계, 평균, 최댓값 등 두개 이상의 연산을 한번에 해야할 경우
summarizingInt
메서드를 지원한다. summarizingInt
메서드는 반환값으로 IntSummaryStatistics 클래스를 값으로 받는다.
6.2.3 문자열 연결
joining
메서드를 이용하면 각 객체에 toString 메서드를 호출해서 하나의 문자열로 연결 해서 반환한다.joining
메서드는 StringBuilder 를 이용해서 문자열을 하나로 만든다.
6.2.4 범용 리듀싱 요약연산
reducing
은 초기값, 내부값, Operator 세가지를 인수로 제공받는다. (초기값을 없어도 가능)reduce
메서드를 잘못 사용하면 여러 스레드가 동시 점유로 인해 병렬로 수행할 수 없다.- 병렬처리 가 필요한 경우는
collet
메서드를 쓰는 것이 좋다. collet
는 결과를 누적하는 컨테이너를 변경,reduce
는 두값을 하나로 도출하는 불변형 연## NOTE : 제네릭 와일드카드 ? 는 형식의 자유로움을 의미한다.
6.3.0 그룹화
- 데이터 집합을 하나이상의 특성으로 분류해 그룹화 하는 연산
groupingBy
으로 그룹화 할 수 있다.- 함수를 기준으로 스트림이 그룹화 되기때문에 분류함수 라고 부른다.
- 분류기준(>,<) 같이 복잡하는 것은 람다로직으로 구현한다.
NOTE : 함수는 독립적으로 존재하는 것을 의미하고 메서드는 클래스에 종속된 것을 의미한다.
6.3.1 다수준 그룹화
groupingBy
는 분류함수와 컬렉터를 인수로 받는다. (분류함수가 먼저 실행)groupingBy
는 스트림의 첫번째요소를 찾은 이후에 그룹화 맵에 추가한다.collectingAndThen
으로 컬렉터가 반환한 결과를 다른 형식으로 활용할 수 있다.- 리듀싱 작업을 할때는
groupingBy
에 두번째 인수로 전달한 컬렉터를 사용한다.(summingInt
) mapping
은 변환함수(표시)와 결과 객체를 누적하는 컬렉터를 인수로 받는다.
6.4.0 분할
- 분할은 분할 함수라 불리는 프레디케이트를 분류 함수로 사용하는 특수한 그룹화 기능이다.
6.4.1 분할의 장점
- 참 거짓 두가지 요소의 스트림 리스트를 모두 유지하는 것이 분할의 장점이다.
partitioningBy
는 프리디케이트 & 컬렉터를 인수로 받는다.
6.5.0 Collector 인터페이스
- Collector 인터페이스는 리듀싱 연산을 어떻게 구현할지 제공하는 메서드 집합으로 구성
- Collector<T,A,R> 에서 T는 수집될 항목, A는 누적자(중간결과 누적), R은 연산결과 객체형태
- 누적과정에서 사용되는 객체가 수집과정의 최종결과로 사용
6.5.1 Collector 인터페이스 메서드 살펴보기
collect
메서드에서 실행하는 함수를 반환하는 메서드supplier
는 빈누적자 인스턴스를 만드는 파라미터가 없는 함수accumulator
는 리듀싱 연상을 수행하는 함수를 반환finisher
는 누적자 객체를 최종 결과로 변환하면서 누적과정을 끝낼때 호출할 함수를 반환combiner
는 서로 다른 서브 스트림을 병렬로 처리할 때 누적자가 판단하여 병합한다
- Charaterisitic 메서드는 컬렉터의 연산을 정의하는 Charaterisitic 형식의 불변 집합을 반환한다.
출처
- Java8 in Action
반응형
'개발서적 > 자바8 인 액션' 카테고리의 다른 글
<Lambda> 8. JAVA8 in Action - Chapter 8 (0) | 2019.04.09 |
---|---|
<Lambda> 7. JAVA8 in Action - Chapter 7 (0) | 2019.04.03 |
<Lambda> 5. JAVA8 in Action - Chapter 5 (0) | 2019.04.01 |
<Lambda> 4. JAVA8 in Action - Chapter 4 (0) | 2019.04.01 |
<Lambda> 3. JAVA8 in Action - Chapter 3 (0) | 2019.03.27 |
블로그의 정보
57개월 BackEnd
BFine