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()는 조건에 맞는 첫 번째 요소만 찾고 더 이상 탐색하지 않습니다.
- 다양한 집계 메서드를 통해 스트림 데이터를 통계처럼 간편하게 분석할 수 있습니다.
📌정리하자면, 이번 예제에서는 스트림의 대표적인 집계 연산 메서드를 모두 활용해보았습니다.
이러한 메서드들은 조건을 함께 조합하면 매우 유용하며,
데이터 분석이나 통계 처리 시 코드의 가독성과 효율을 높여주는 핵심 기능입니다.