[java] 스트림 API를 이용한 데이터 그루핑 방법

스트림 API는 자바 8부터 도입된 기능으로, 컬렉션 데이터를 처리하는 강력한 도구입니다. 스트림 API를 이용하면 데이터를 손쉽게 그루핑하고 처리할 수 있습니다. 본 포스트에서는 스트림 API를 이용하여 데이터를 그루핑하는 방법에 대해 알아보겠습니다.

1. 그루핑 기준 정의하기

데이터를 그루핑하기 위해서는 그루핑 기준을 먼저 정의해야 합니다. 일반적으로 그루핑 기준은 객체의 속성이나 필드를 기준으로 설정됩니다. 예를 들어, 학생 객체의 성적을 기준으로 그루핑하거나, 도시 객체의 지역을 기준으로 그루핑하는 등의 방식으로 그루핑 기준을 정의할 수 있습니다.

2. 스트림을 그루핑하여 맵으로 변환하기

스트림 API는 Collectors.groupingBy 메서드를 제공하여 스트림을 그루핑하고 맵으로 변환할 수 있습니다. 이 메서드는 그루핑 기준을 인자로 받으며, 그루핑 기준에 따라 그루핑된 결과를 맵으로 반환합니다. 아래는 학생 객체를 이름으로 그루핑한 예제입니다.

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Student {

    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

public class Main {

    public static void main(String[] args) {
        List<Student> students = List.of(
                new Student("Alice", 85),
                new Student("Bob", 90),
                new Student("Alice", 80),
                new Student("Bob", 95)
        );

        Map<String, List<Student>> studentMap = students.stream()
                .collect(Collectors.groupingBy(Student::getName));

        System.out.println(studentMap);
    }
}

실행 결과는 다음과 같습니다.

{Alice=[Student@1, Student@3], Bob=[Student@2, Student@4]}

3. 그루핑된 결과의 활용

맵으로 그루핑된 결과를 활용하여 원하는 작업을 수행할 수 있습니다. 예를 들어, 그루핑된 결과를 기반으로 평균 성적을 계산하거나, 특정 그룹의 데이터를 필터링하는 등의 작업을 수행할 수 있습니다.

아래는 그루핑된 데이터를 활용하여 각 학생의 평균 성적을 계산하는 예제입니다.

import java.util.Map;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) {
        Map<String, Double> averageScoreByStudent = students.stream()
                .collect(Collectors.groupingBy(Student::getName, Collectors.averagingInt(Student::getScore)));

        System.out.println(averageScoreByStudent);
    }
}

실행 결과는 다음과 같습니다.

{Alice=82.5, Bob=92.5}

4. 마무리

스트림 API를 이용하여 데이터를 그루핑하는 방법에 대해 알아보았습니다. 그루핑 기준을 정의하고, Collectors.groupingBy 메서드를 이용하여 그루핑하고 맵으로 반환할 수 있습니다. 그루핑된 결과를 활용하여 원하는 작업을 수행할 수 있으므로, 스트림 API를 적절히 활용하여 데이터 그루핑을 스마트하게 처리해보세요.