1️⃣ 스트림이란 ?

package stream.sec01;

import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;

public class StreamMain {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("홍길동");
        set.add("신용권");
        set.add("김자바");

        Stream<String> stream = set.stream();
        // 람다식 요소 처리 방법
        stream.forEach(name -> System.out.println(name));
    }
}

Screenshot 2025-06-03 at 3.37.02 PM.png

Stream 특징

  1. 내부 반복자이므로 처리 속도가 빠르고 병렬 처리에 효율적
  2. 람다식을 이용하여 다양한 요소 처리 정의 가능
  3. 중간 처리와 최종 처리를 수행하도록 파이프 라인 형성 가능

2️⃣ 내부 반복자

Screenshot 2025-06-03 at 3.46.27 PM.png

내부 반복자는 멀티 코어 CPU를 최대한 활용하기 위해 요소들을 분배시켜 병렬 작업을 할 수 있음. 하나씩 처리하는 순차적 외부 반복자보다는 효율적으로 요소를 반복시킬 수 있는 장점

package stream.sec02;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class ParallelStreamMain {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        Stream<String> parallelStream = list.parallelStream();
        parallelStream.forEach(name ->{
            System.out.println(name + " : " + Thread.currentThread().getName());
        });
    }
}

Screenshot 2025-06-03 at 3.55.44 PM.png

항목 stream() parallelStream()
실행 방식 순차 처리 (단일 스레드) 병렬 처리 (여러 스레드)
스레드 수 기본적으로 main 스레드 하나만 사용 ForkJoinPool의 여러 스레드 사용
처리 순서 순서를 보장함 순서 보장 안 됨 (속도 우선)
CPU 사용 싱글 코어 멀티코어 활용 가능
사용 목적 단순 반복, 순서 중요할 때 속도 중요, 대량 데이터 처리 시 유리