Java/자바 정리
180. groupingBy()를 사용한 스트림 분류 – 성별로 그룹화하기
코딩하는냥이
2025. 5. 26. 15:10
반응형
스트림에서 Collectors.groupingBy()를 사용하면
공통된 속성을 기준으로 데이터를 그룹화하여 Map으로 수집할 수 있습니다.
이번 예제에서는 학생 리스트를 성별(남/여) 로 분류하여
각 그룹의 학생 이름을 출력해보겠습니다.
📦 Student.java
package ch17.sec12;
public class Student {
private String name, sex;
private int score;
public Student(String name, String sex, int score) {
this.name = name;
this.sex = sex;
this.score = score;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public int getScore() {
return score;
}
}
📌 예제 코드
package ch17.sec12;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class CollectExample {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student("홍길동", "남", 92));
list.add(new Student("김수영", "여", 87));
list.add(new Student("감자바", "남", 95));
list.add(new Student("파이썬", "여", 93));
// 성별로 그룹화
Map<String, List<Student>> map = list.stream()
.collect(Collectors.groupingBy(Student::getSex));
// 남학생 그룹 출력
List<Student> maleList = map.get("남");
maleList.stream()
.forEach(s -> System.out.println(s.getName()));
System.out.println();
// 여학생 그룹 출력
List<Student> femaleList = map.get("여");
femaleList.stream()
.forEach(s -> System.out.println(s.getName()));
}
}
💻 실행 결과
홍길동
감자바
김수영
파이썬
💬 코드 설명
- Collectors.groupingBy(Student::getSex)
→ getSex() 값(남/여)을 기준으로 학생들을 Map<String, List<Student>> 구조로 분류합니다. - map.get("남"), map.get("여")
→ 각각 남학생과 여학생 그룹을 꺼냅니다. - 각 그룹은 List<Student> 형태이며, 이후 다시 stream()을 사용해 이름을 출력합니다.
💡 포인트 정리
- groupingBy()는 스트림을 기준 값으로 Map 형식의 그룹으로 수집할 때 사용됩니다.
- 리턴 결과는 기본적으로 Map<기준값, List<요소>>입니다.
- 분류 기준으로는 성별, 부서, 연령대 등 다양한 필드를 사용할 수 있습니다.
- 그룹별 처리가 필요할 때는 groupingBy()를 사용하면 코드가 깔끔해집니다.
📌정리하자면, 이번 예제에서는 Collectors.groupingBy()를 사용하여 학생 데이터를 성별로 그룹화하고,
각 그룹의 학생 이름을 출력해보았습니다.
이 방식은 데이터를 카테고리별로 나누고자 할 때 매우 유용하며,
데이터 분석, 리포트, 통계 처리 등 다양한 상황에서 활용할 수 있습니다.