JAVA Stream 최종연산

강정우·2022년 11월 19일
0

JAVA

목록 보기
29/31
post-thumbnail

최종연산의 특징 : 스트림의 모든 요소에 지정된 작업을 수행한다.


1. 반복문

  • forEach() : 병렬스트림인 경우 순서 보장 X
  • forEachOrdered() : 병렬스트림인 경우도 순서 보장 O
void forEach((Consumer<? super T> action)
void forEachOrdered(Consumer<? super T> action)
  • 예제
IntStream.range(1, 10).sequential().forEach(System.out::print);
IntStream.range(1, 10).sequential().forEachOrdered(System.out::print);

IntStream.range(1, 10).parallel().forEach(System.out::print);			// 얘만 다른 결과값이 나옴
IntStream.range(1, 10).parallel().forEachOrdered(System.out::print);

2. 조건문

  • allMatch() : 모든 요소가 조건을 만족하면 true
  • anyMatch() : 한 요소라도 조건을 만족하면 true
  • noneMatch() : 모든 요소가 조건을 만족하지 않으면 true
boolean allMatch(Predicate<? super T> predicate)
boolean anyMatch(Predicate<? super T> predicate)
boolean noneMatch(Predicate<? super T> predicate)
  • 예시
boolean hasFailedStu = stuStream.anyMatch(s-> s.getTotalScore()<=100);

  • findFirst() : 첫 번째 요소를 반환 sequential
  • findAny() : 아무거나 하나 반환 parallel
Optional<T> findFirst()
Optional<T> findAny()
  • 예시
Optional<Stuedent> result = stuStream.filter(s-> s.getTotalScore() <= 100).findFirst();
Optional<Stuedent> result = parallelStream.filter(s-> s.getTotalScore() <= 100).findAny();

3. 핵심 reduce()

  • 스트림의 요소를 하나씩 줄여가며 누적연산 수행
Optional<T> reduce(BinaryOperator<T> accumulator)
T reduce(T identity, BinaryOperator<T> accumulator)		// 핵심!!
U reduce(U identity, BiFunction<U, T, U> accumulator, BinaryOperator<U> combiner)

// identity : 초기값
// accumulator : 이전 연산결과와 스트림의 요소에 수행할 연산
// combiner : 병렬처리된 결과를 합치는데 사용할 연산 (병렬 스트림)
  • 위 식에서 U는 별로고 T가 정말 중요!!
    또 1, 2번째 코드가 같은 의미이지만 예외처리를 했냐 안 했냐의 차이이다.

  • 예제 Math 함수 stream reduce로 구현

int count = intStream.reduce(0, (a, b) -> a + 1);
int sum = intStream.reduce(0, (a, b) -> a + b);
int max = intStream.reduce(Integer.MIN_VALUE, (a, b) -> a > b ? a : b);
int min = intStream.reduce(Integer.MAX_VALUE, (a, b) -> a < b ? a : b);
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글