스트림(Stream)은 배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리할 수 있는 기능을 제공한다. 이를 통해 for문 등을 사용한 반복 작업을 줄이고 코드를 간결하게 작성할 수 있다. 스트림은 크게 세 가지 단계로 구성된다.
String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
List<Integer> list = Arrays.asList(1, 2, 3);
Stream<Integer> stream = list.stream();
아래 기능 외에도 여러가지가 있지만 대표적으로 filter와 map을 살펴보겠다.
IntStream intStream = IntStream.range(1, 10).filter(n -> n % 2 == 0);
filter 메소드는 내부 조건에 해당하는 요소들을 추출한다.
IntStream intStream = IntStream.range(1, 10).map(n -> n + 1);
map 메소드는 각 요소에 대해 주어진 연산을 수행하여 새로운 값을 생성한다.
최종 연산도 대표적으로 sum, average, min, max를 살펴보겠다.
IntStream.range(1, 5).sum(); // 합계
IntStream.range(1, 5).average().getAsDouble(); // 평균
IntStream.range(1, 5).min().getAsInt(); // 최솟값
IntStream.range(1, 5).max().getAsInt(); // 최댓값
스트림의 최종 연산은 스트림을 처리하고 결과를 반환하는 단계로, 스트림을 닫고 더 이상의 연산을 수행하지 않는다. 이를 통해 스트림을 효율적으로 처리할 수 있다.