Java/연습문제
자바 연습문제 - Stream으로 객체 리스트를 그룹핑하기
코딩하는냥이
2025. 5. 26. 16:16
반응형
📖 문제
List에 저장되어 있는 Member 객체를 직업별로 그룹핑하여 Map<String, List<Member>> 객체로 생성하려고 합니다.
- Map의 키는 Member의 직업
- Map의 값은 해당 직업을 가진 Member 객체의 리스트
Collectors.groupingBy()를 활용해 문제를 해결해보세요.
📦 예제 클래스
Member.java
public class Member {
private String name;
private String job;
public Member(String name, String job) {
this.name = name;
this.job = job;
}
public String getName() {
return name;
}
public String getJob() {
return job;
}
@Override
public String toString() {
return name + " (" + job + ")";
}
}
Example.java
public class Example {
public static void main(String[] args) {
List<Member> list = Arrays.asList(
new Member("홍길동", "개발자"),
new Member("김일러", "디자이너"),
new Member("파이썬", "개발자")
);
Map<String, List<Member>> groupingMap = list.stream()
.collect(Collectors.groupingBy(m -> m.getJob()));
System.out.println("[개발자]");
List<Member> devList = groupingMap.get("개발자");
devList.stream().forEach(System.out::println);
System.out.println();
System.out.println("[디자이너]");
List<Member> desList = groupingMap.get("디자이너");
desList.stream().forEach(System.out::println);
}
}
💻 실행 결과
[개발자]
홍길동 (개발자)
파이썬 (개발자)
[디자이너]
김일러 (디자이너)
💬 코드 설명
- .collect(Collectors.groupingBy(...))를 통해 스트림의 요소들을 지정한 기준(직업)으로 그룹핑합니다.
- 반환된 Map에서 "개발자"와 "디자이너"를 키로 사용해 리스트를 추출합니다.
- 각 그룹에 대해 forEach()를 사용해 Member 정보를 출력합니다.
- toString()을 오버라이딩하면 출력이 더 보기 좋게 정리됩니다.
💡 학습 포인트
- Collectors.groupingBy() 사용법 익히기
- 그룹핑 기준 필드를 지정하면 자동으로 Map으로 분류됩니다.
- Map<String, List<T>> 구조 이해하기
- 키에 따라 데이터를 분류하는 실무 패턴을 이해할 수 있습니다.
- 스트림 후처리
- 그룹핑 후 다시 Stream을 사용해 각 그룹의 데이터를 개별 출력할 수 있습니다.
- 출력 포맷을 위한 toString() 오버라이딩
- 출력 결과를 보기 좋게 하기 위해 toString()을 재정의하는 습관은 실무에서도 유용합니다.
📌 마무리 정리
- 작성하신 코드는 문제의 요구사항을 충실히 반영한 정확한 정답입니다.
- 이 문제는 Stream의 고급 기능 중 하나인 그룹핑(groupingBy)을 연습할 수 있는 좋은 예제입니다.
- 실무에서는 보고서, 통계, 필터링된 목록 분류 등 다양한 곳에 응용됩니다.