본문 바로가기
Language/Java

[java8] Stream vs Collection

by 돈코츠라멘 2019. 8. 30.

A java.util.Stream represents a sequence of elements on which one or more operations can be performed. Stream operations are either intermediate or terminal. While terminal operations return a result of a certain type, intermediate operations return the stream itself so you can chain multiple method calls in a row. Streams are created on a source, e.g. a java.util.Collection like lists or sets (maps are not supported). Stream operations can either be executed sequential or parallel.

  • Collection: java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공한다. Collection interface 하위로 Set 계열(SortedSet, LinkedHashSet, HashSet)과 List 계열(ArrayList, LinkedList, Vector)가 있고, 별도로 Map 계열(SortedMap, TreeMap, HashMap, HashTable)이 존재한다. Map은 Collection을 확장하지 않았지만 Collection으로 분류되어 사용되고 있다.
  • Collection은 데이터를 담는 것이 역할이기 때문에 제공되는 API들도 데이터의 입출력이 대부분이다. 그래서 Collection의 데이터를 사용할 때 그 Collection을 순회하며 데이터를 꺼내 연산하는 코딩이 주를 이룬다.

한마디로 Collection은 자료구조들의 구현체고 Stream은 자료구조들을 다루는 역할을 한다. 다른 것들과 비교되는 Stream의 기본적인 특징은 아래와 같다.

  • 자료구조가 아니다.
  • 람다(Lambda)를 위해 디자인 되었다.
  • index로 접근하는 것을 지원하지 않는다.
  • Array나 List로 결과를 쉽게 낼 수 있다.
  • Lazy Access
  • Parallelizable

댓글