JaeniWorld

[Java] Stream API, Stream과 Collection의 차이 본문

프로그래밍/JAVA

[Java] Stream API, Stream과 Collection의 차이

jaeni 2021. 1. 11. 14:17
반응형

 

Stream Process

 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임으로 예로 들자면 공장 라인을 들 수 있다 한 작업장에서 작업물을 받아 다음 작업을 처리할 수 있도록 넘겨주는 것이다. 이때 각각의 작업장은 다른 업무를 처리하지만 전체적으로 보았을 때, 동시간에 작업을 처리하고 한 개의 작업물 만을 작업한다.

** 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소

Stream예시) 입력 스트림은 데이터를 한 개씩 읽음 / 출력 스트림은 데이터를 한 개씩 기록

 

Stream API

스트림은 자바 8 API에 새로 추가된 기능으로 이를 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 기존 자바7에서 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 코드이다. 이 상황에서 400 칼로리 이하의 음식을 담는 lowCaloricDishes는 가비지 변수 (컨테이너 역할만 하는 변수)가 된다.

List<Dish> lowCaloricDishes = new ArrayList<>();
for(Dish d: ,menu){
	if(dish.getCalories() < 400){
   		lowCaloricDishes.add(dish);
        }
    }
}

Collections.sort(lowCaloricDishes, new Comparator<Dish>()}
	public int compare(Dish d1, Dish d2){
    	return Integer.compare(d1.getCalories(), d2.getCalories());
        }
});

List<String> lowCaloricDishesName = new ArrayList<>();
for(Dish dish: lowCloricDishes){
	lowCaloricDishesName.add(dish.getName());
}

 

스트림을 사용하면 선언형으로 코드를 구현할 수 있기 때문에 위와 달리 짧고 간결한 코드를 볼 수있게 된다.

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;

List<String> lowCaloricDishesName=
				menu.stream()
                .filter(d->d.getCalories()<400)
                .sorted(comparing(Dish::getCalories))
                .map(Dish::getName)
                .collect(toList());

 

해당 코드에서 stream() parallelStream()을 사용하면 아키텍처에서 해당코드를 병렬로 사용할 수 있다.

 

StreamCollection

Stream   Collection
표현계산식
(ex. Filter, sorted, map, etc.)
주 구성요소 시간과 공간의 복잡성과 관련된 요소 저장 및 접근 연산
요청할 때만 데이터 계산 시점 모든 값이 계산을 기다릴 때 까지
내부반복 반복 외부반복

 

Reference

-docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

- 모던 자바 인 액션

 

모던 자바 인 액션

자바 1.0이 나온 이후 18년을 통틀어 가장 큰 변화가 자바 8 이후 이어지고 있다. 자바 8 이후 모던 자바를 이용하면 기존의 자바 코드 모두 그대로 쓸 수 있으며, 새로운 기능과 문법, 디자인 패턴

www.yes24.com

 

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 디폴트 메소드(Default methods)  (0) 2021.01.12
[Java] Java 8에 추가된 API  (0) 2021.01.12
[Java] Collection factory  (0) 2021.01.12
[Java] Stream 데이터 수집  (0) 2021.01.11
[Java] Stream 연산  (0) 2021.01.11
Comments