Java8 Streams.collect grouping to List

java8 Stream 을 이용하여 Tree 구조의 리스트 객체로 그룹핑을 해보자.

Model 객체 [ 공급사 정보, 상품 정보, 상품품목 정보]

Object 개념은 공급사(Supp.class) > 상품(Product.class) > 상품품목(Goods.Class) 이다.

관계는
Supp.products — List<Product>
Product.goods — List<Goods>
이다.

List<Model> modelList를 List<Supp>로 그룹핑 변환해보자.

Model.stream().collect()메소드를 사용한다.
넘겨지는 인자 Collector는 Collectors.collectingAndThen()으로 처리한다.
Collectors.collectingAndThen 메소드는 Collector downStream과 Function finisher 두개의 인자값을 받는다.
downStream에서 처리된 값을 finisher에서 후처리 해주는 식이다.

downStream에 Collectors.groupingBy를 이용해 Map<Key, List> 형태로 그룹핑 하면,
finisher에서 Key객체의 List를 담을수 있는 멤버변수에 List를 할당하면 되겠다.

소스는 아래와 같다.

출력은

원하는 리턴 타입구조만 잘 생각한다면 Collectors 클래스를 이용하여
충분히 원하는 형태로 리턴되도록 작성할 수 있다.

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store