MapleStory Cookie With Halo

☕ JAVA/☕ Class & Method

[JAVA][Stream]최종 연산

뉴이 NUEY 2024. 12. 17. 18:01
반응형

 

최종연산의 종류

 

최종 연산 설명
void  forEach(Consumer<? super T> action)
void  forEachOrdered(Consumer<? super T> action)
각 요소에 지정된 작업 수행.(향상된 for문과 비슷하다)
병렬된 스트림일 경우 forEachOrdered()를 써야 순서가 유지된다.
long count() 스트림 요소 갯수.
Optional<T>  max(Comparator<? super T> comparator)
Optional<T>  min(Comparator<? super T> comparator)
스트림의 최대값/최소값 반환.
Optional<T>  findAny()  // 아무거나 하나
Optional<T>  findFirst() // 첫 번째 요소
(주로 filter()랑 같이 사용해서)
조건에 맞는 요소 중 하나를 반환한다.
boolean  allMatch(Predicate<T> p)     // 모두 만족하는 지
boolean  anyMatch(Predicate<T> p)   // 하나라도 만족하는 지
boolean  noneMatch(Predicate<T> p) // 모두 만족하는 지
주어진 조건을 만족시키는 요소가 있는 지 확인한다.
Object[ ]  toArray()
A[ ]          toArray(IntFunction<A[ ] generator>) 
스트림의 모든 요소를 배열로 반환.
toArray(IntFunction<A[ ] generator>)는특정 타입의 배열로 반환할 수 있다.
Optional<T>  reduce(BinaryOperator<T> accumulator)
T  reduce(T identity, BinaryOperator<T> accumulator)
U  reduce(U identity, BiFunction<U,T,U> accumulator)
스트림의 요소를 하나씩 줄여가며서 계산한다.
collect(Collector<T,A,R> collector)
R  collect(Supplier<R> supplier, BiConsumer<R,T> accumulator,
                    BiConsumer<B,R> combiner)
스트림의 요소를 수집한다.
주로 요소를 그룹화하거나 분할한 결과를 컬렉션에 담아 반환하는데 사용된다.

 

🌟 최종 연산은 스트림을 소모하기 때문에 일회성이다.

 


 

 출력
forEach()
forEachOrdered()

 

기본 스트림이 직렬이기 때문에 여기서는 별 차이 없지만

💡 기본적으로 스트림은 직렬스트림(stream.sequential() 한 것과 같음)입니다.
하지만 병렬스트림으로 바꾸면(stream.parallel()) 순서가 보장되지 않습니다.

이렇게 병렬로 바꾸면 순서가 엉망이되는데, forEachOrdered()를 사용하면 순서를 보장해줍니다.

 

  • forEach() : 모두 출력.
    • 병렬 스트림인 경우, 순서는 보장 안되지만 성능이 약간 더 좋다.

  • forEachOrdered() : 병렬스트림도 순서 보장 출력.

 


 

조건 검사
allMatch()
anyMatch()
nonMatch()

 

출력결과

 

  • allMatch()   : 모든 요소가 조건을 만족시키면 true.

  • anyMatch() : 한 요소라도 조건을 만족시키면 true.

  • nonMatch() : 모든 요소가 조건을 만족시키지 않으면 true.


 

조건에 일치하는 요소 찾기
findFirst()
findAny()

 

💡 보통 이렇게 filter()랑 같이 사용한다.

 

  • findFirst()
    • 첫번 째 요소 반환.
    • 순차 스트림에 사용.

  • findAny()
    • 아무거나 하나 반환.
    • 병렬 스트림에 사용.

 


 

 

⭐ reduce()
: 스트림 요소를 하나씩 줄여가며
누적연산accumulator한다.

 

 

  • identity - 초기값.

  • acculmulator - 수행할 연산.
    • BinarayOperator를 사용하기 때문에 
    • 매개변수2개⭕ 반환⭕
    • 이 때 변수와 반환 타입 모두 동일해야 한다.

  • combiner - 병렬 결과를 합칠 때 사용할 연산.

🌟 reduce의 구조.
Stream의 최종연산은 모두 reduce로 만들어졌다.

 

 


 

예제

 

이런 문자열 배열을 이용해 실습해보겠습니다.

 

길이가 0인 문자열이 하나도 없으니까 true. B로 시작하는 단어들 중 첫번째 거를 반환했습니다.

 

문자열들의 길이로 IntStream을 만들었습니다.

 

count, sum, max, min 만드는 코드

 


참조영상1

참조영상2

반응형