오늘은 자바 개념 중 Stream에 대해서 정리해보겠습니다.
Stream은 컬렉션에서 데이터를 꺼내 선언형(무엇을 할지) 으로 가공하는 데이터 처리 파이프라인입니다.
리스트(배열) 같은 데이터에 필터 → 변환 → 정리 → 결과 만들기 를 파이프처럼 줄줄이 연결해서 처리하는 방식입니다.
예시
과일 목록에서 길이 5 이상인 것만 골라서 대문자로 만들고 정렬
List<String> fruits = List.of("apple", "kiwi", "banana");
List<String> out = fruits.stream()
.filter(f -> f.length() >= 5) // 골라내기
.map(String::toUpperCase) // 바꾸기
.sorted() // 정렬
.toList(); // 결과 만들기
- filter = 거르기
- map = 바꾸기
- toList = 최종 결과 만들기
중간에 있는 filter, map은 설정만 해놓는 거고,
마지막에 toList(), count(), sum() 같은 최종 연산이 나와야 실제로 코드가 돌아갑니다.
Stream vs for문 - 성능 차이
- 속도: 보통 for가 더 빠름
- 코드 읽기/수정 편함: Stream
Stream은 내부에서
- 람다 호출(함수 호출)
- 파이프라인 처리
등 과정이 있습니다.
따라서 단순한 반복 + 단순 계산이면 보통 for가 훨씬 빠릅니다.
✅ 예: 합계
Stream에서 쓰는 람다란?
람다는 그냥 “짧은 함수”입니다.
예: x -> x * 2
=> x를 받아서 x*2를 리턴하는 함수
자주 쓰는 함수형 인터페이스
Stream에서 람다의 역할
- Predicate (검사) : T -> boolean
- filter에 주로 씀
.filter(x -> x > 10)
- Function (변환) : T -> R
- map에 씀
.map(x -> x * 2)
- Consumer (사용/출력) : T -> void
- forEach에 씀
.forEach(System.out::println)
- Supplier (공급) : () -> T
Stream.generate(() -> 1)
'Java' 카테고리의 다른 글
| [Java] Exception(예외) (0) | 2026.02.05 |
|---|---|
| [Java] equals() 와 hashCode() (0) | 2026.02.04 |
| [Java] GC (0) | 2026.01.30 |
| [Java] Synchronized에 대해 - 2 (0) | 2026.01.26 |
| [Java] Synchronized에 대해 (0) | 2026.01.23 |