본문 바로가기
IT/Java

자바 Stream API를 활용한 데이터 처리 예제

by bamcong 2025. 3. 9.
728x90
반응형

안녕하세요. 오늘은 자바의 Stream API를 활용하여 반복문 필터링, 소팅 등을 어떻게 구현할 수 있는지에 대해 다양한 예제를 통해 알아보겠습니다. Stream API는 자바 8에서 도입된 기능으로, 컬렉션을 기능형 프로그래밍 스타일로 처리할 수 있게 해줍니다.

Stream API란 무엇인가?

Stream API는 자바의 컬렉션 프레임워크에 대해 좀 더 직관적이고 선언적인 방식의 조작을 가능하게 해줍니다. 간단히 말해, 데이터를 한 줄의 코드로 간결하게 처리할 수 있도록 도와주는 강력한 도구입니다. 예를 들어, 원주율을 구하는 것처럼 수많은 수를 처리하는 작업을 Stream API를 통해 쉽게 할 수 있습니다.

1. 데이터 생성

먼저, 예제를 위해 간단한 학생(Student) 클래스를 정의하겠습니다. 학생은 이름과 점수를 가지며, 이를 리스트 형태로 저장할 것입니다. 코드는 다음과 같습니다.

import java.util.Arrays;
import java.util.List;

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;
    }

    @Override
    public String toString() {
        return "Student{name='" + name + "', score=" + score + "}";
    }
}

// 학생 리스트 생성
List students = Arrays.asList(
    new Student("Alice", 85),
    new Student("Bob", 70),
    new Student("Charlie", 95),
    new Student("David", 65)
);

2. 필터링

이제 학생 리스트에서 점수가 80점 이상인 학생들을 필터링하는 방법을 알아보겠습니다.

import java.util.stream.Collectors;

List filteredStudents = students.stream()
    .filter(student -> student.getScore() >= 80)
    .collect(Collectors.toList());

System.out.println("점수 80점 이상의 학생들: " + filteredStudents);

예제 설명: 위의 코드는 Stream을 이용하여 점수가 80점 이상인 학생들만 필터링하여 새로운 리스트를 생성합니다.

3. 소팅

다음으로, 점수를 기준으로 학생을 정렬하는 방법을 살펴보겠습니다. 아래 코드를 참고하세요.

List sortedStudents = students.stream()
    .sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore())) // 점수를 기준으로 내림차순 정렬
    .collect(Collectors.toList());

System.out.println("점수 정렬된 학생들: " + sortedStudents);

예제 설명: 위의 코드는 Stream을 사용하여 점수 기준으로 내림차순 정렬합니다.

4. 점수 평균 계산

학생들의 점수 평균을 계산하는 방법도 Stream API를 이용하여 쉽게 구현할 수 있습니다.

double averageScore = students.stream()
    .mapToInt(Student::getScore)
    .average()
    .orElse(0);

System.out.println("학생들의 평균 점수: " + averageScore);

예제 설명: stream()에 mapToInt()를 사용하여 학생의 점수를 int형 태입으로 매핑한 다음, 평균 값을 구합니다.

5. 결과 출력

최종적으로 모든 예제를 하나로 통합한 메인 메서드는 아래와 같습니다.

public static void main(String[] args) {
    // 학생 리스트 생성
    List students = Arrays.asList(
        new Student("Alice", 85),
        new Student("Bob", 70),
        new Student("Charlie", 95),
        new Student("David", 65)
    );

    // 필터링
    List filteredStudents = students.stream()
        .filter(student -> student.getScore() >= 80)
        .collect(Collectors.toList());

    System.out.println("점수 80점 이상의 학생들: " + filteredStudents);

    // 소팅
    List sortedStudents = students.stream()
        .sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore()))
        .collect(Collectors.toList());

    System.out.println("점수 정렬된 학생들: " + sortedStudents);

    // 평균 계산
    double averageScore = students.stream()
        .mapToInt(Student::getScore)
        .average()
        .orElse(0);
    
    System.out.println("학생들의 평균 점수: " + averageScore);
}

결론: 위의 예제들을 통해 자바의 Stream API를 활용한 반복문 필터링, 소팅 및 평균 계산에 대해 알아보았습니다. 코드가 간결해지고 가독성이 높아지는 것을 느끼실 수 있으실 것입니다.

728x90
반응형