반응형
최종연산의 종류
최종 연산 | 설명 |
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) |
스트림의 요소를 하나씩 줄여가며서 계산한다. |
R 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()) 순서가 보장되지 않습니다.
- forEach() : 모두 출력.
- 병렬 스트림인 경우, 순서는 보장 안되지만 성능이 약간 더 좋다.
- 병렬 스트림인 경우, 순서는 보장 안되지만 성능이 약간 더 좋다.
- forEachOrdered() : 병렬스트림도 순서 보장 출력.
조건 검사
allMatch()
anyMatch()
nonMatch()
- allMatch() : 모든 요소가 조건을 만족시키면 true.
- anyMatch() : 한 요소라도 조건을 만족시키면 true.
- nonMatch() : 모든 요소가 조건을 만족시키지 않으면 true.
조건에 일치하는 요소 찾기
findFirst()
findAny()
💡 보통 이렇게 filter()랑 같이 사용한다.
- findFirst()
- 첫번 째 요소 반환.
- 순차 스트림에 사용.
- findAny()
- 아무거나 하나 반환.
- 병렬 스트림에 사용.
⭐ reduce()
: 스트림 요소를 하나씩 줄여가며
누적연산accumulator한다.
- identity - 초기값.
- acculmulator - 수행할 연산.
- BinarayOperator를 사용하기 때문에
- 매개변수2개⭕ 반환⭕
- 이 때 변수와 반환 타입 모두 동일해야 한다.
- combiner - 병렬 결과를 합칠 때 사용할 연산.
🌟 reduce의 구조.
예제
반응형
'☕ JAVA > ☕ Class & Method' 카테고리의 다른 글
[JAVA][Stream]그룹화와 분할 partitioningBy() & groupingBy() (0) | 2024.12.19 |
---|---|
[JAVA][Stream]collect()와 Collectors (0) | 2024.12.18 |
[JAVA]Optional<T> (0) | 2024.12.17 |
[JAVA][Stream]중간 연산-map() peek() flatMap() (1) | 2024.12.16 |
[JAVA][Stream]중간 연산-filter() distinct() skip() limit() sorted() (0) | 2024.12.16 |