강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

GGOBUGI님의 프로필 이미지
GGOBUGI

작성한 질문수

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

작성

·

26

·

수정됨

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 인턴입니다.
GGOBUGI님이 질문하신 Collectors.collectingAndThen()에 대한 이해는 올바르다고 생각됩니다.

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

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

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

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

관련 문서 보기

GGOBUGI님의 프로필 이미지
GGOBUGI

작성한 질문수

질문하기