스트림은 자바 8에서 도입된 데이터 처리 API로, 데이터의 흐름을 처리하는 데 중점을 둔다. 컬렉션이나 배열의 데이터를 간결하고 선언적인 방식으로 처리할 수 있게 해주는 도구이다. 스트림을 사용하면 데이터를 필터링, 변환, 집계 등의 작업을 쉽게 할 수 있다.
스트림을 사용하기 위해서는 보통 다음 3단계를 따른다:
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Jake", "Tom");
// 스트림을 사용해 'J'로 시작하는 이름을 필터링하고 출력
names.stream() // 1. 스트림 생성
.filter(name -> name.startsWith("J")) // 2. 중간 연산
.forEach(System.out::println); // 3. 최종 연산
}
}
John
Jane
Jake
스트림 연산은 크게 두 가지로 나뉜다:
filter()
, map()
, sorted()
forEach()
, collect()
names.stream()
.filter(name -> name.length() > 3)
.forEach(System.out::println); // 이름 길이가 3 초과인 요소 출력
names.stream()
.map(String::toUpperCase) // 모든 이름을 대문자로 변환
.forEach(System.out::println);
names.stream()
.sorted()
.forEach(System.out::println); // 이름을 알파벳 순서로 정렬 후 출력
names.stream()
.forEach(System.out::println); // 각 요소 출력
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList()); // 'J'로 시작하는 이름을 리스트로 수집
스트림을 사용하면 복잡한 반복문을 대체할 수 있고, 선언적인 방식으로 코드를 작성할 수 있어 가독성이 높아진다.
예시: 기존 반복문 방식
for (String name : names) {
if (name.startsWith("J")) {
System.out.println(name);
}
}
스트림 사용:
names.stream()
.filter(name -> name.startsWith("J"))
.forEach(System.out::println);
스트림은 쉽게 병렬 처리로 변환할 수 있다. parallelStream()
을 사용하면 데이터를 병렬로 처리하여 성능을 높일 수 있다.
예시:
names.parallelStream()
.filter(name -> name.startsWith("J"))
.forEach(System.out::println); // 병렬 처리로 요소 출력
스트림은 자바 8에서 도입된 데이터 처리 API로, 데이터를 간결하고 선언적인 방식으로 처리할 수 있다. 스트림은 필터링, 매핑, 집계 등의 작업을 통해 코드를 간결하게 작성할 수 있으며, 병렬 처리를 통해 성능도 향상시킬 수 있다.
스트림을 활용하면 반복문을 대체하여 가독성이 높은 코드를 작성할 수 있고, 자주 사용하는 메서드인 filter()
, map()
, forEach()
등을 숙지하는 것이 중요하다.