스트림이란?
- 자바 8 API에 새로 추가된 기능으로, 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다.
- 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다.
- 스트림을 이용하면 멀테스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.
- 스트림의 특징 : 선언형, 조립 가능, 병렬화
컬렉션과 스트림
차이 |
컬렉션 |
스트림 |
데이터를 계산하는 시점 |
모든 값을 메모리에 저장하므로, 값은 컬렉션에 추가하기 전에 계산된다. |
요청할 때만 값을 계산한다. |
데이터를 계산하는 횟수 |
메모리에 저장되있으므로 언제든지 탐색 가능하다. |
딱 한 번만 탐색할 수 있다. |
버반복 |
외부 반복(for문 사용) |
내부 반복(내부에서 알아서 처리한다) |
병렬성 |
synchronized로 직접 관리해야 한다. |
내부 반복을 통해 알아서 관리, 처리한다. |
//컬렉션 사용
List<String> names = new ArrayList<>();
Iterator<String> iter = menu.iterator();
while(iterator.hasNext()) {
Dish dish = iter.next();
names.add(dis.getName());
}
//스트림 사용
List<String> names = menu.stream()
.map(Dish::getName)
.collect(toList());
스트림 연산
- 중간 연산 - filter,map, sorted, peek, flatMap
- 최종 연산 - reduce, collect, count, forEach, allMatch 등
댓글