Java 8에서 도입된 스트림 API는 컬렉션, 배열 등의 데이터를 함수형 프로그래밍 스타일로 처리할 수 있는 기능을 제공합니다.
스트림 API를 사용하면 데이터 처리 파이프라인을 간결하고 가독성 있게 구성할 수 있습니다.
1. 스트림 생성
스트림은 컬렉션, 배열, I/O 채널 등 다양한 소스로부터 생성할 수 있습니다.
1
2
3
4
5
6
7
|
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> numberStream = numbers.stream();
int[] arrayOfNumbers = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(arrayOfNumbers);
Stream<String> lines = Files.lines(Path.of(“file.txt”));
|
cs |
2. 중간 연산
중간 연산은 스트림을 변환하거나 필터링하는 등의 작업을 수행하며, 그 결과로 새로운 스트림을 반환합니다. 중간 연산은 지연 실행(lazy evaluation)되며, 최종 연산이 호출될 때까지 실행되지 않습니다.
1
2
3
4
5
6
7
8
|
List<String> words = Arrays.asList(“apple”, “banana”, “cherry”, “date”);
List<String> filteredWords = words.stream()
.filter(word –> word.length() > 5)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(“Filtered words: “ + filteredWords);
|
cs |
3. 최종 연산
최종 연산은 스트림 파이프라인을 실행하고 결과를 생성합니다. 최종 연산이 호출되면 스트림은 소모되며, 더 이상 사용할 수 없습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream()
.filter(num –> num % 2 == 0)
.count();
System.out.println(“Even numbers count: “ + count);
int sum = numbers.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println(“Sum of numbers: “ + sum);
|
cs |
4. 기본형 스트림
스트림 API는 기본형 데이터(int
, long
, double
등)를 효율적으로 처리하기 위해 특별한 스트림을 제공합니다. 이를 통해 오토박싱/언박싱 오버헤드를 줄일 수 있습니다.
1
2
3
|
IntStream intStream = IntStream.range(1, 10);
LongStream longStream = LongStream.rangeClosed(1, 10);
DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0);
|
cs |
5. 병렬 스트림
스트림 API는 병렬 처리를 손쉽게 구현할 수 있는 기능을 제공합니다. parallelStream()
메서드를 호출하면 병렬 스트림이 생성되며, 가능한 경우 여러 스레드에서 작업을 분할하여 처리합니다.
1
2
3
4
5
6
7
|
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sumOfSquares = numbers.parallelStream()
.mapToInt(num –> num * num)
.sum();
System.out.println(“Sum of squares: “ + sumOfSquares);
|
cs |
6. 무한 스트림
스트림 API는 무한한 요소를 가진 스트림을 생성할 수 있습니다. Stream.iterate()
와 Stream.generate()
메서드를 사용하여 무한 스트림을 만들 수 있습니다.
1
2
3
4
5
6
|
Stream<Integer> infiniteStream = Stream.iterate(0, i –> i + 1);
List<Integer> firstTenNumbers = infiniteStream
.limit(10)
.collect(Collectors.toList());
System.out.println(“First ten numbers: “ + firstTenNumbers);
|
cs |
스트림 API는 Java에서 함수형 프로그래밍 스타일로 데이터를 처리할 수 있는 강력한 도구입니다. 스트림 API를 활용하면 코드를 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리 등 고급 기능을 쉽게 구현할 수 있습니다.
- Oracle Java Documentation – Stream
- Baeldung – Introduction to Java 8 Streams
- GeeksforGeeks – Stream in Java
- Oracle Java Tutorials – Aggregate Operations
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.