작성
·
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
은 주어진 컬렉터의 결과를 추가적인 변환(여기서는 학생 객체를 학생의 이름 문자열로)을 적용하는데 적합한 방법입니다.
위의 코드에 사용된 방식으로 이해하셔도 좋다고 사료됩니다.
추가적으로 더 궁금한 부분이 있다면 언제든지 질문해 주세요!
즐거운 코딩 되세요!