스트림 API

✒️ 2025-05-15 10:39 내용 수정


데이터를 처리하고 조작하기 위한 방법을 제공하는 API

특징

  1. 배열, 컬렉션, 파일에 저장된 데이터 등을 모두 같은 방법으로 다룰 수 있다.
    • 컬렉션에 저장된 요소들을 하나씩 순회하면서 처리할 수 있다.
  2. 외부 반복을 통해 작업하는 컬렉션과 달리 내부 반복(internal iteration)을 통해 작업을 수행한다.
  3. 스트림은 재사용이 가능한 컬렉션과 달리 단 한 번만 사용할 수 있다.
  4. 원본 데이터를 변경하지 않는다.
  5. 연산은 필터-맵(filter-map) 기반의 api를 사용하여 지연(lazy) 연산을 통해 성능을 최적화한다.
    • 지연 연산 : 중간 처리 연산은 요청 시 수행되고, 최종 처리 연산을 호출할 때까지 데이터를 처리하지 않는다.
  6. parallelStream() 메소드들 통해 쉬운 병렬 처리를 지원한다.

스트림api동작흐름.png
https://www.tcpschool.com/java/java_stream_concept

메소드 설명
concat(stream1, stream2) 스트림1과 스트림2를 연결해서 새로운 스트림 생성
count() 스트림의 모든 요소를 카운트
sum() 스트림의 모든 요소를 합산
boxed() 스트림의 기본 데이터 타입을 Wrapper 클래스로 변환
findFirst() 스트림의 첫 번째 요소를 반환
메소드 설명
getAsInt() 값이 존재하면 값을 반환, 없다면 NoSuchElementException 예외 반환
getAsDouble() getAsInt의 double형 반환

유의 사항

  1. IntStream을 List<Integer>로 변환하려면 boxed()를 사용하여 int 타입을 Integer로 만들어야 한다.
  2. 항상 스트림이 좋은 것은 아니다. 상황에 따라 다르다.