/////
Search
Duplicate
0️⃣

개요

5장에서는 스트림으로 데이터베이스처럼 질의를 수행할 수 있음을 배웠다.
자바 8의 스트림은 데이터 집합을 멋지게 처리해주는 게으른 반복자라고 정의내릴 수 있다.
스트림의 연산은 filter, map 같은 중간 연산count, findFirst, forEach, reduce 등의 최종 연산으로 구분할 수 있다.
중간 연산은 한 스트림을 다른 스트림으로 변환하는 연산으로 여러 연산을 연결할 수 있다. 중간 연산은 스트림 파이프라인을 구성하며 스트림의 요소를 소비하지 않는다.
최종 연산은 스트림의 요소를 소비해서 최종 결과를 도출한다. 최종 연산은 스트림 파이프라인을 최적화하면서 계산 과정을 짧게 생략하기도 한다.
이 장에서는 reduce가 그랬던 것처럼 collect 역시 다양한 요소 누적 방식을 인수로 받아서 스트림을 최종 결과로 도출하는 리듀싱 연산을 수행할 수 있음을 설명한다.
다양한 요소 누적 방식은 Collector 인터페이스에 정의되어 있다. 지금부터 Collection, Collector, collect를 헷갈리지 않도록 주의하자
다음은 collectCollector와 구현할 수 있는 질의 예제다.
통화별로 트랜잭션을 그룹화한 다음에 해당 통화로 일어난 모든 트랜잭션 합계를 계산하시오 → Map<Currency, Integer> 반환
트랜잭션을 비싼 트랜잭션과 저렴한 트랜잭션 두 그룹으로 분류하시오 → Map<Boolean, List<Transaction>> 반환
트랜잭션을 도시 등 다수준으로 그룹화하시오, 그리고 각 트랜잭션이 비싼지 저렴한지 구분하시오 → Map<String, Map<Boolean, List<Transaction>>> 반환