Java

[Java] Stream

parangofsky 2026. 2. 3. 23:48

오늘은 자바 개념 중 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에서 람다의 역할

  1. Predicate (검사) : T -> boolean
  • filter에 주로 씀
 
.filter(x -> x > 10)
  1. Function (변환) : T -> R
  • map에 씀
 
.map(x -> x * 2)
  1. Consumer (사용/출력) : T -> void
  • forEach에 씀
 
.forEach(System.out::println)
  1. 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