스트림 연산

반응형
728x90
반응형

스트림 연산

java.util.stream.Stream 인터페이스는 많은 연산을 정의한다. 스트림 인터페이스의 연산은 2가지로 구분된다.

List<String> names = menu.stream() // 요리 리스트에서 스트림 얻기
                        .filter(dish -> dish.getCalories() > 300) // 중간연산
                        .map(Dish::getName) // 중간연산
                        .limit(3) // 중간연산 (쇼트서킷)
                        .collect(toList()); // 스트림을 리스트로 변환

 

1) 중간 연산 : 연결할 수 있는 스트림 연산 (filter, map, limit)
2) 최종 연산 : 스트림을 닫는 연산 (collect)

 

 

중간 연산

filter나 sorted 같은 중간 연산은 다른 스트림을 반환한다. 중간 연산은 중간 연산을 합친 다음에 최종 연산으로 한번에 처리하기 때문에 단말 연산(.collect(toList())을 스트림 파이프라인에 실행하기 전까지는 아무 연산도 수행하지 않는다.

filter, map, limit, sorted, distinct

 

최종 연산

스트림 파이프라인에서 결과를 도출한다. 보통 최종 연산에 의해 List, Integer, void 등 스트림 이외의 결과가 반환된다.

forEach : 스트림의 각 요소를 소비하면서 람다를 적용한다.
count : 스트림의 요소 개수를 반환한다.
collect : 스트림을 리듀스해서 리스트, 맵, 정수 형식의 컬렉션을 만든다.

 

스트림 이용하기

스트림 이용과정은 아래 3가지와 같다.

1) 질의를 수행할 (컬렉션 같은) 데이터 소스
2) 스트림 파이프라인을 구성할 중간 연산 연결
3) 스트림 파이프라인을 실행하고 결과를 만들 최종 연산

 

스트림 파이프라인의 개념은 빌더패턴과 비슷하다. 빌더 패턴에서는 호출을 연결해서 설정을 만든다. 그리고 준비된 설정에 build 메서드를 호출한다. 빌더 패턴에 대한 자세한 설명은 devforest.tistory.com/43 을 참고하자.

반응형

'Coding > Java' 카테고리의 다른 글

숫자형 스트림  (0) 2020.11.06
싱글턴 패턴  (0) 2020.11.06
스트림 vs 컬렉션  (0) 2020.11.06
스트림 구현  (0) 2020.11.06
스트림의 기본개념  (0) 2020.11.06

Designed by JB FACTORY