반응형

스트림의 연산

  • 스트림이 제공하는 기능 - 중간 연산과 최종 연산


1. 스트림 만들기
2. 중간 연산 (n번)
3. 최종 연산 (1번)

중간연산은 연산 결과가 스트림이다. 반복적으로 적용할 수 있다. 

최종연산은 연산 결과가 스트림이 아닌 연산이다. 단 한번만 적용이 가능하다.(스트림의 요소를 소모)

그래서 만약 최종연산 이후에 뭔가 더 다른 작업을 하고 싶다면, 스트림을 새로 생성해서 진행해야 한다.

 

 

스트림의 연산 - 중간 연산 

distinct()는 중복을 제거하는 메서드다.

filter(Predicate<T> predicate)는 매개변수로 조건식을 주면 조건에 안 맞는 요소는 제외하고 조건에 맞는 것만 남겨주는 메서드다.

limit()는 스트림의 일부를 잘라내는 메서드다.

skip()은 스트림의 일부를 건너뛰는 메서드다.

peek(Consumer<T> action)은 작업사이에 넣어서 작업중간에 결과를 볼 때 사용하는 메서드다. 

sorted()는 스트림의 요소를 정렬한다.  스트림 요소가 가지고 있는 기본 정렬을 가지고 정렬한다.

map과 flatMap은 스트림의 요소를 변환한다.

 

중간 연산의 핵심은 map()과 flapMap() 이다. 매개변수로 어떻게 변환할지 람다식을 줄 수 있는데,
이것에 대한 것은 다음 차시에 살펴보겠다.

 

 

스트림의 연산 - 최종 연산

forEach()는 각 요소에 지정된 작업을 수행한다.
forEachOrdered()는 병렬 스트림을 처리할 때도 작업 스트림의 순서를 유지하려할 때 사용하는 메서드다. 

count()는 스트림의 요소 개수를 반환한다.

max()는 최댓값 min()은 최소값을 반환하는데, 매개변수에 Comparator 가 들어간다. 즉, 정렬 기준을 줘야한다.

findAny()는 스트의 요소중 아무거나 하나를 반환한다. findAny()는 병렬 처리할 때 사용한다.
findFirst()는 스트림의 첫번쨰 요소 하나를 반환한다. findFirst()는 직렬 처리할 때 사용한다.
이 둘은 filter()와 같이 쓰인다. 조건에 맞는 것중에 아무거나 반환하는 것이 findAny()고, 조건에 맞는 것중에 첫번째 값을 반환하는 것이 findFirst()다.
Optional 이라는 래퍼클래스 객체에 담아서 반환해주는데, 이렇게 반환하는 이유는, 비어있는 스트림같은 경우에는 요소가 하나도 없을 수도 있다. 이때 null을 그냥 반환하는 것 보다 Optional로 감싸서 반환하면 이점이 있어서 이렇게 한다.

allMatch(), anyMatch(), noneMatch() 는 매개변수로 어떤 조건식을 주면, 이 조건식에 맞는 요소가 있는지를 알려준다.
allMatch()는 이 조건에 전부 만족하는지,
anyMatch()는 이 조건에 만족하는게 하나라도 있는지,
noneMatch()는 이 조건에 모두 만족하지 않는지 확인해서 boolean으로 반환한다.

toArray()는 스트림의 모든 요소를 객체 배열에 담아서 반환해준다. 기본적으로 반환값이 Obejct[] 이지만,
매개변수에 generator를 주면 특정 타입의 배열로 반환받을 수 있다.

reduce()와 collect()는 최종연산의 핵심이다.
reduce()는 스트림의 요소를 하나씩 줄여가면서(리듀싱) 계산한다.
sum()같은 경우, 만약 스트림이 요쇼가 1, 2, 3, 4, 5가 있으면, 요소를 하나씩 꺼내서 덧셈을 할 것이다.
스트림의 요소를 하나씩 줄여가면서(리듀싱) 계산하는데, 이때 reduce()가 사용된다. count()도 reduce로 작업을 한다.

 


collect()는 스트림의 요소를 수집한다. 주로 요소를 그룹화하거나 분할한 결과를 컬렉션에 담아 반환하는데 사용된다.

 

 

 

반응형

'JAVA' 카테고리의 다른 글

스트림의 중간연산(2)  (0) 2022.11.19
스트림의 중간연산(1)  (0) 2022.11.19
스트림 만들기  (0) 2022.11.15
스트림, 스트림의 특징  (0) 2022.11.14
메서드 참조, 생성자의 메서드 참조  (0) 2022.08.05