Java8 Streams.collect grouping to List
Aug 9, 2017 · 2 min read
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 클래스를 이용하여
충분히 원하는 형태로 리턴되도록 작성할 수 있다.
