JAVA · 함수형/Stream
스트림 파이프라인 원리
스트림의 지연 평가(Lazy Evaluation)와 중간/최종 연산의 동작을 이해합니다.
함수형/Stream중급Stream지연평가파이프라인중간연산
핵심 설명
스트림의 지연 평가(Lazy Evaluation)와 중간/최종 연산의 동작을 이해합니다.
Java code
import java.util.*;
import java.util.stream.*;
public class StreamPipeline {
public static void main(String[] args) {
List<String> names = List.of("Alice", "Bob", "Charlie", "Dave", "Eve");
// 지연 평가 — 최종 연산 전까지 실행 안 됨
Stream<String> stream = names.stream()
.filter(n -> {
System.out.println("filter: " + n);
return n.length() > 3;
})
.map(n -> {
System.out.println("map: " + n);
return n.toUpperCase();
});
// 여기까지 아무것도 출력 안 됨!
// 최종 연산이 파이프라인 실행
List<String> result = stream.toList();
// filter: Alice -> map: Alice
// filter: Bob (통과 못 함)
// filter: Charlie -> map: Charlie
// filter: Dave -> map: Dave
// filter: Eve (통과 못 함)
// 단축 연산 — 필요한 만큼만 처리
Optional<String> first = names.stream()
.filter(n -> n.startsWith("C"))
.findFirst(); // Charlie 찾으면 즉시 중단
System.out.println(first.orElse("없음"));
// 스트림은 일회용!
// stream.toList(); // IllegalStateException
}
}학습 팁
findFirst(), anyMatch() 등의 단축 연산은 조건 충족 시 나머지 원소를 처리하지 않습니다. 성능 최적화에 활용하세요.
주의할 점
스트림은 한 번만 소비할 수 있습니다. 재사용이 필요하면 Supplier<Stream>으로 감싸거나 컬렉션에 먼저 수집하세요.
자주 묻는 질문
스트림 파이프라인 원리란 무엇인가요?
스트림의 지연 평가(Lazy Evaluation)와 중간/최종 연산의 동작을 이해합니다.
스트림 파이프라인 원리 학습 시 주의할 점은 무엇인가요?
스트림은 한 번만 소비할 수 있습니다. 재사용이 필요하면 Supplier<Stream> 으로 감싸거나 컬렉션에 먼저 수집하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.