PHpullh
학습 라이브러리/Java/스트림 파이프라인 원리

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&lt;Stream&gt; 으로 감싸거나 컬렉션에 먼저 수집하세요.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.