Java/자바 정리

176. 스트림 집계(Aggregate) 연산 – count, sum, average, max, min, findFirst

코딩하는냥이 2025. 5. 26. 12:32
반응형

스트림(Stream)은 데이터를 반복 처리할 뿐만 아니라,
조건에 맞는 값의 개수, 합계, 평균, 최대/최소, 첫 번째 요소 등을 쉽게 구할 수 있습니다.
이번 예제에서는 다양한 집계 메서드를 활용하여 간단한 정수 배열을 집계해보겠습니다.


📌 예제 코드

import java.util.Arrays;

public class AggregateExample {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 };

		// 2의 배수 개수
		long count = Arrays.stream(arr)
			.filter(a -> a % 2 == 0)
			.count();
		System.out.println("2의 배수 개수 : " + count);

		// 2의 배수의 합
		long sum = Arrays.stream(arr)
			.filter(a -> a % 2 == 0)
			.sum();
		System.out.println("2의 배수의 합 : " + sum);

		// 2의 배수의 평균
		double ave = Arrays.stream(arr)
			.filter(a -> a % 2 == 0)
			.average()
			.getAsDouble();
		System.out.println("2의 배수의 평균: " + ave);

		// 2의 배수 중 최대값
		int max = Arrays.stream(arr)
			.filter(a -> a % 2 == 0)
			.max()
			.getAsInt();
		System.out.println("2의 배수 중 최대값: " + max);

		// 2의 배수 중 최소값
		int min = Arrays.stream(arr)
			.filter(a -> a % 2 == 0)
			.min()
			.getAsInt();
		System.out.println("2의 배수 중 최소값: " + min);

		// 3의 배수 중 첫 번째 요소
		int first = Arrays.stream(arr)
			.filter(a -> a % 3 == 0)
			.findFirst()
			.getAsInt();
		System.out.println("3의 배수 중 첫번째: " + first);
	}
}

💻 실행 결과

2의 배수 개수 : 2
2의 배수의 합 : 6
2의 배수의 평균: 3.0
2의 배수 중 최대값: 4
2의 배수 중 최소값: 2
3의 배수 중 첫번째: 3

💬 코드 설명

  • .count()
    → 조건에 맞는 요소의 개수를 구합니다.
  • .sum()
    → 필터링된 숫자의 합을 구합니다.
  • .average()
    → 평균을 구하며, 결과는 OptionalDouble로 반환되므로 .getAsDouble()을 사용합니다.
  • .max(), .min()
    → 각각 최대값과 최소값을 구하며, OptionalInt이므로 .getAsInt()로 꺼냅니다.
  • .findFirst()
    → 조건에 맞는 첫 번째 요소를 반환하며, 없으면 예외가 발생할 수 있으므로 주의가 필요합니다.

💡 포인트 정리

  • OptionalDouble, OptionalInt 등의 반환 타입은 값이 없을 수 있음을 감안한 구조입니다.
  • .getAsXxx() 메서드는 값이 있을 때만 안전하며, 그렇지 않으면 NoSuchElementException이 발생할 수 있습니다.
  • findFirst()는 조건에 맞는 첫 번째 요소만 찾고 더 이상 탐색하지 않습니다.
  • 다양한 집계 메서드를 통해 스트림 데이터를 통계처럼 간편하게 분석할 수 있습니다.

📌정리하자면, 이번 예제에서는 스트림의 대표적인 집계 연산 메서드를 모두 활용해보았습니다.
이러한 메서드들은 조건을 함께 조합하면 매우 유용하며,
데이터 분석이나 통계 처리 시 코드의 가독성과 효율을 높여주는 핵심 기능입니다.