inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

다운 스트림 컬렉터 Collectors.collectingAndThen()

31

ㅅㄱㅇ

작성한 질문수 1

0

// 4단계 : 학년별로 가장 점수가 높은 학생의 이름을 구해라. (collectingAndThen + maxBy 사용)
// 학년별 그룹 -> 그룹별 가장 점수가 높은 학생 -> 그룹별 최고점 학생 -> 그룹별 최고점 학생의 이름
Map<Integer, String> collect4 = students.stream()
        .collect(Collectors.groupingBy( // 스트림 컬렉터
                Student::getGrade,
                Collectors.collectingAndThen(   // 다운 스트림 컬렉터
                        Collectors.maxBy(Comparator.comparingInt(Student::getScore)),   // 다운 다운 스트림 컬렉터
                        sOpt -> sOpt.get().getName()
                )
        ));

System.out.println("collect4 = " + collect4);

Collectors.collectingAndThen()을 저런식으로 이해해도 될까요?

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
GGOBUGI님이 질문하신 Collectors.collectingAndThen()에 대한 이해는 올바르다고 생각됩니다.

Collectors.collectingAndThen()은 주어진 컬렉터로 수집한 결과를 변환할 때 사용됩니다. 질문에 주어진 코드를 보면, 학년별로 그룹화한 후 각각의 그룹에서 최고점수를 가진 학생을 선택하는데 Collectors.maxBy를 사용하고, 그 후 collectingAndThen을 통해 그 결과를 학생의 이름으로 변환하고 있습니다.

따라서, collectingAndThen은 주어진 컬렉터의 결과를 추가적인 변환(여기서는 학생 객체를 학생의 이름 문자열로)을 적용하는데 적합한 방법입니다.

위의 코드에 사용된 방식으로 이해하셔도 좋다고 사료됩니다.

추가적으로 더 궁금한 부분이 있다면 언제든지 질문해 주세요!
즐거운 코딩 되세요!

관련 문서 보기

백준 서비스 종료

9

776

1

강의 추천해주세요

2

16

1

구글 폼 작성 완료!

1

33

1

시험 시작하기 전에 한 가지 질문 있습니다.

1

41

2