Java의 Stream를 이용한 선언적인 프로그래밍을 할 수 있다. 특히나 groupingBy 메서드를 통해서 데이터를 가공,집계하는데 많이 사용한다.
groupingBy는 영어 그대로에서도 알 수 있듯이, 특정 속성(property)값에 의해서 그룹핑을 짓는 것이다. 그렇기 때문에 결과값으로 항상 Map<K, V> 형태를 리턴하게 된다. SQL문에서도 사용하는 group by 를 생각하면 더 쉽게 이해할 수 있다.
groupingBy 메서드는 최대 3가지 파라미터를 받는 메서드들로 구성되어 있다.
classifier (Function<? super T,? extends K> ): 분류 기준을 나타낸다.
mapFactory (Supplier) : 결과 Map 구성 방식을 변경할 수 있다.
downStream (Collector<? super T,A,D>): 집계 방식을 변경할 수 있다.
