Skip to content

Stream 소개

Jeonghyun Kang edited this page May 17, 2022 · 3 revisions

Stream

  • 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴
  • Stream은 데이터를 담고 있는 저장소가 아니다.
  • Stream은 original 데이터 소스를 변경하지 않는다.
  • 병렬처리가 가능하다 (parallelStream)

스트림 파이프라인

  • 다수의 중개 오퍼레이션(없어도 가능)과 한 개의 종료 오퍼레이션으로 구성한다.
  • 종료 오퍼레이션을 실행하기 전까지 스트림의 데이터 소스는 처리되지 않는다.
    • 중개 오퍼레이션은 근본적으로 lazy하다!

중개 오퍼레이션

Stream을 리턴한다.

  • filter: 조건이 참인 엘리먼트만 스트림에 담는다.
  • map: 들어온 엘리먼트의 타입을 바꾸어 스트림에 담는다.
  • limit
  • skip
  • sorted

종료 오퍼레이션

Stream을 리턴하지 않는다.

  • collect
  • allMatch: 전부 true면 true 리턴
  • forEach
  • min / max

Collectors

Stream을 일반적인 List, Set 등으로 변경시키기 위한 클래스

  • Stream.collect()메소드의 파라미터는 Collectors 클래스의 구현체가 들어가야한다.
  • Collectors 클래스의 구현체는 Collectors 클래스의 static 메소드를 통해 얻을 수 있다.
    • Collectors.toList(): 스트림을 ArrayList로 변환시키는 Collectors 구현체를 반환함.
    • Collectors.toCollection(LinkedList::new): 스트림을 LinkedList로 변환시키는 Collectors 구현체를 반환함.