기본 집계
집계(Aggregate)는 최종 처리 기능으로 요소들을 처리해서 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하는 것을 말한다. 집계는 대량의 데이터를 가공해서 축소하는 리덕션(Reduction)이라고 볼 수 있다.
1. 스트림이 제공하는 기본 집계
리턴 타입 | 메소드(매개 변수) | 설명 |
---|---|---|
long | count() | 요소 개수 |
OptionalXXX | findFirst() | 첫 번째 요소 |
Optional<T> OptionalXXX |
max(Comparator<T>) max() |
최대 요소 |
Optional<T> OptionalXXX |
min(Comparator<T>) min() |
최소 요소 |
OptionalDouble | average() | 요소 평균 |
int, long, double | sum() | 요소 총합 |
이 집계 메소드에서 리턴하는 OptionalXXX
는 자바 8에서 추가한 java.util 패키지의 Optional
, OptionalDouble
, OptionalInt
, OptionalLong
클래스 타입을 말한다. 이들은 값을 저장하는 값 기반 클래스(value-based class)들이다. 이 객체에서 값을 얻기 위해서는 get()
, getAsDouble()
, getAsInt()
, getAsLong()
을 호출하면 된다.
import java.util.Arrays;
public class AggregateExample {
public static void main(String[] args){
long count = Arrays.stream(new int[] {1, 2, 3, 4, 5});
.filter(n -> n%2 == 0)
.count();
System.out.println("2의 배수 개수: " + count);
long sum = Arrays.stream(new int[] {1, 2, 3, 4, 5})
.filter(n -> n%2 == 0)
.sum();
System.out.println("2의 배수의 합: " + sum);
double avg = Arrays.stream(new int[] {1, 2, 3, 4, 5})
.filter(n -> n%2 ==0)
.average()
.getAsDouble();
System.out.println("2의 배수의 평균: " + avg);
int max = Arrays.stream(new int[] {1, 2, 3, 4, 5})
.filter(n -> n%2 == 0)
.max()
.getAsInt();
System.out.println("최대값" + max);
int min = Arrays.stream(new int[] {1, 2, 3, 4, 5})
.filter(n -> n%2 == 0)
.min()
.getAsInt();
System.out.println("최소값" + min);
int first = Arrays.stream(new int[] {1, 2, 3, 4, 5})
.filter(n -> n%3 == 0)
.findFirst()
.getAsInt();
System.out.println("첫번째 3의 배수: " + first);
}
}