Java/기본 문법
스트림(Stream)
by 정구정구
2026. 6. 4.
스트림(Stream)
- 데이터를 효율적으로 처리할 수 있는 흐름
- 선언형 스타일로 가독성이 뛰어남
- 데이터 준비 -> 중간 연산 -> 최종 연산 순으로 처리됨
for 문 vs 스트림
- [리스트 각 요소에 *10 처리]를 하는 코드 비교
for문
public class Main
{
public static void main(String[] args)
{
List<Integer> arrayList = new ArrayList<>(List.of(1, 2, 3, 4, 5));
List<Integer> ret = new ArrayList<>();
for (Integer num : arrayList)
{
int multipliedNum = num * 10; // 각 요소 * 10
ret.add(multipliedNum);
}
System.out.println("ret = " + ret);
}
}
스트림
public class Main
{
public static void main(String[] args)
{
List<Integer> arrayList = new ArrayList<>(List.of(1, 2, 3, 4, 5));
List<Integer> ret = arrayList.stream().map(num -> num * 10).collect(Collectors.toList());
System.out.println("ret = " + ret);
}
}
스트림 처리 단계
| 단계 |
단계 이름 |
설명 |
주요 API |
| 1 |
데이터 준비 |
컬렉션을 스트림으로 변환 |
stream(), parallelStream() |
| 2 |
중간 연산 등록 |
데이터 변환 및 필터링 |
map(), filter(), sorted() |
| 3 |
최종 연산 |
최종 처리 및 데이터 변환 |
collect(), forEach(), count() |
List<Integer> ret = arrayList.stream() // 1. 데이터 준비
.map(num -> num * 10) // 2. 중간 연산 등록 (람다식 사용)
.collect(Collectors.toList()); // 3. 최종 연산
스트림 중간 연산 함께 사용하기
- 짝수만 10배로 변환 시키는 예시 (filter + map)
List<Integer> arrayList = new ArrayList<>(List.of(1, 2, 3, 4, 5));
List<Integer> ret = arrayList.stream() // 1. 데이터 준비: 스트림 생성
.filter(num -> num % 2 == 0) // 2. 중간 연산: 짝수만 필터링
.map(num -> num * 10) // 3. 중간 연산: 10배로 변환
.collect(Collectors.toList()); // 4. 최종 연산: 리스트로 변환
System.out.println(ret); // 출력: [20, 40]