[자바 – Java] 스트림 연산 특징 filter map sorted

1. 스트림(Stream)

 

1) data의 흐름을 말한다.

2) 컬렉션(Collection) 형태로 구성된 데이터를 람다를 이용해 간결하고 직관적으로 프로세스하게 해준다.

– 배열, 컬렉션을 대상으로 연산을 수행한다.

– 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 해준다.

3) for, while 등을 이용하던 기존 loop을 대체해서 쓸 수 있다.

4) 손쉽게 병렬 처리를 할 수 있게 해준다.


 

2. 스트림 특징

 

1) 한번 생성하고 사용한 스트림은 재사용 할 수 없다.

– 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모된다.

– 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야한다.

2) 스트림 연산은 기존 자료를 변경하지 않는다.

– 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되어도 기존 자료에 대한 변경은 발생하지 않는다.

3) 스트림 연산은 중간 연산과 최종 연산으로 구분된다.

– 스트림에 대해 중간 연산은 여러 개의 적용 될 수 있지만 최종 연산은 마지막에 한 번만 적용된다.

– 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 그 결과가 만들어진다.

– 지연 연산

– 중간 연산에 대한 결과를 연산 중에 할 수 없다.


 

3. 스트림생성


 

4. 스트림 중간 연산, 최종 연산

 

1) 중간 연산 :  filter(), map(), sorted() 등 조건에 맞는 요소를 추출(filter)하거나 요소를 변환한다.(map)

– filter() : 만족하는 데이터만 걸러내는데 사용한다.

– map() : 데이터를 변형하는데 사용하고 데이터에 해당 함수가 적용된 결과물을 제공하는 스트림을 리턴한다.

– sorted() : 데이터가 순서대로 정렬된 스트림을 리턴한다.

2) 최종 연산이 호출될 때 중간연산이 수행되고 결과가 생성된다.

3) 중간 연산과 최종 연산에 대한 구현을 람다식을 활용한다.

4) 최종 연산 :  forEach(), count(), sum() 등

5) 스트림이 관리하는 자료를 하나씩 소모해가면서 연산이 수행된다.

6) 최종 연산 후에 스트림은 더 이상 다른 연산을 적용할 수 없다.

7) 여러가지 중간 처리를 이어붙이는 것이 가능하다.

– Source(컬렉션, 배열) => 중간처리 => 종결 처리