Java의 스트림(Stream)은 데이터의 흐름을 통해 선언적으로 데이터를 처리하는 기능이다. 스트림의 주요 특징은 다음과 같다.
- 지연 평가: 최종 연산이 호출될 때까지 중간 연산을 지연시킨다.
- 내부 반복: 명시적인 반복문을 제거할 수 있다.
- 병렬 처리:
parallelStream메서드로 간단히 병렬 처리할 수 있다.
다음 예제는 스트림을 사용하여 int 자료형의 배열 data에 대해 일련의 연산을 적용한다. 메서드 체이닝을 통해 여러 연산을 적용하고, 람다 표현식을 메서드 매개변수에 전달해서 구체적인 연산 방법을 제공하기도 한다.
import java.util.Arrays;
import java.util.Comparator;
public class Sample {
public static void main(String[] args) {
int[] data = {1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10};
int[] result = Arrays
.stream(data)
.boxed() // Stream<Integer>로 변환
.filter((x) -> x % 2 == 0)
.distinct()
.sorted(Comparator.reverseOrder()) // Stream<Integer> 전용 메서드
.mapToInt(Integer::intValue) // IntStream으로 변환
.toArray();
for (int r : result) {
System.out.println(r);
}
}
}
스트림 처리 과정
스트림은 다음 세 단계에 걸쳐 최종적인 결과를 생성한다.
- 스트림 생성: 데이터 소스로부터 스트림을 생성한다.
- 중간 연산: 데이터 변환, 필터링 등의 연산을 여러 개 연결한다.
- 종단 연산: 최종적인 결과를 생성하며 스트림을 종료한다.
참고 문헌
- 핀테크 인턴십 코스 교안
- Stream API 이해하기 -1: 용어 및 Stream 생성