자바/스트림

collect() 메서드(3) - groupingBy()

백_곰 2022. 4. 20. 14:47

1. groupingBy()에 의한 분류

- 아래의 코드처럼 그룹화를 하면 기본적으로 List<T>에 담으며, toList()를 생략한다.

 

Map<Integer, List<Stu3>> stuByBan = Stream.of(stuArr)

                                          .collect(groupingBy(Stu3::getBan, toList()));

// toList()가 생략 가능 !!

 

Map<Integer, HashSet<Stu3>> stuByHak = Stream.of(stuArr)

                                          .collect(groupingBy(Stu3::getHak, toCollection(HashSet::new));

 

( 또한 toSet()을 사용할 수도 있다. )

 

 

( 아래의 Student의 정보가 있는 stu3클래스가 정의되어 있다고 가정하고 아래의 예제를 수행할 것이다. )

 

 

 

(1) 반별 기준으로 그룹화하기.

 

 

 

(2) 성적별로 그룹화하기.

 

 

 

(3) 성적별로 그룹화한 것을 counting() 통계하기.

 

 

 

(4) 학년과 반을 기준으로 다중 그룹화하기.

( 출력문이 길어 생략하였음. )

 

 

 

(5) 학년과 반별로 기준을 나눈 뒤, 각 반의 1등을 뽑아보기.

( collectingAndThen은 collect() 뒤에 한번 더 쓸 경우 사용된다, )

 

 

 

(6) 학년과 반별을 기준으로 나열하고 성적을 가지고 HIGH, MID, LOW 지정하기. 

( 단, 성적의 등급 HIGH, MID, LOW는 중복되지 않는다. )

( 이해를 돕기 위해 1-3에 일부러 50, 150, 200으로 세팅했다. )