본문 바로가기
스터디

[모던 자바 인 액션] 4장. Stream

by eunoo 2023. 6. 30.
스트림이란?
  • 자바 8 API에 새로 추가된 기능으로, 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다.
  • 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다.
  • 스트림을 이용하면 멀테스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.
    • parallelStream() 사용
  • 스트림의 특징 : 선언형, 조립 가능, 병렬화

 

컬렉션과 스트림
차이 컬렉션 스트림
데이터를 계산하는 시점 모든 값을 메모리에 저장하므로, 값은 컬렉션에 추가하기 전에 계산된다. 요청할 때만 값을 계산한다.
데이터를 계산하는 횟수 메모리에 저장되있으므로 언제든지 탐색 가능하다. 딱 한 번만 탐색할 수 있다.
버반복 외부 반복(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 등

댓글