[java] 스트림 API를 이용한 데이터 리듀스 방법

Java 8부터 도입된 스트림 API는 데이터 처리를 효율적으로 다룰 수 있는 강력한 도구입니다. 스트림 API를 사용하면 데이터 컬렉션에서 원하는 결과를 쉽게 얻을 수 있습니다. 이번 포스트에서는 스트림 API를 이용하여 데이터를 리듀스하는 방법에 대해 알아보겠습니다.

스트림 리듀스란?

스트림 리듀스는 스트림의 요소를 하나의 값으로 줄이는 작업을 말합니다. 예를 들어, 정수 리스트가 있을 때 이 리스트의 합계를 구하거나, 최대값 또는 최소값을 찾는 등의 동작이 스트림 리듀스에 해당합니다.

기본 리듀스 연산

스트림 API에서는 다양한 리듀스 연산을 제공합니다. 가장 기본적인 리듀스 연산은 reduce 메소드를 이용하는 것입니다. reduce 메소드는 두 개의 인자를 받아 첫 번째 인자로 초기값을, 두 번째 인자로 연산을 수행하는 BinaryOperator를 전달합니다.

예제 코드

아래 예제는 정수 리스트의 합계를 구하는 코드입니다.

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

public class StreamReduceExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        int sum = numbers.stream()
                .reduce(0, (a, b) -> a + b);

        System.out.println("Sum: " + sum);
    }
}

위 코드에서는 numbers 리스트를 스트림으로 변환한 후에 reduce 메소드를 호출하여 합계를 구합니다. 초기값으로 0을 전달하고, 요소들을 더하는 연산을 수행하는 BinaryOperator를 전달합니다. 결과로 합계인 15가 출력됩니다.

다른 리듀스 연산

스트림 API에는 sum, max, min, average, count와 같이 다양한 리듀스 연산들이 제공됩니다. 이러한 연산들은 직관적으로 사용할 수 있으며, reduce 메소드를 사용하지 않아도 되므로 코드가 간결해집니다.

예제 코드

아래 예제는 정수 리스트의 최대값을 구하는 코드입니다.

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

public class StreamReduceExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        int max = numbers.stream()
                .max(Integer::compareTo)
                .orElse(0);

        System.out.println("Max: " + max);
    }
}

위 코드에서는 numbers 리스트를 스트림으로 변환한 후에 max 메소드를 호출하여 최대값을 구합니다. max 메소드는 요소들 중 가장 큰 값을 구하는 리듀스 연산을 수행합니다. 결과로 최대값인 5가 출력됩니다. 만약 리스트가 비어있을 경우를 대비하여 orElse 메소드를 통해 기본값 0을 설정할 수 있습니다.

결론

스트림 API를 이용하면 데이터 리듀스 작업을 간결하고 효율적으로 수행할 수 있습니다. reduce 메소드를 사용하여 기본적인 리듀스 연산을 수행할 수 있고, sum, max, min, average, count와 같은 메소드를 사용하여 다양한 리듀스 연산을 직관적으로 수행할 수 있습니다.

더 자세한 내용은 Java 공식 문서를 참조하시기 바랍니다.

포스트를 읽어주셔서 감사합니다!