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으로 세팅했다. )
'자바 > 스트림' 카테고리의 다른 글
Collector (0) | 2022.04.21 |
---|---|
collect() 메서드(2) - partitioningBy() (0) | 2022.04.20 |
collect() 메서드(1) (0) | 2022.04.19 |
스트림의 최종 연산(조건 검사, 통계, 리듀싱) (0) | 2022.04.15 |
Optional<T>와 OptionalInt (0) | 2022.04.15 |