TIL_230308_자바의 정석 복습_람다와 스트림 3

창고·2023년 3월 8일
0

Chapter 14. 람다와 스트림

2. 스트림(stream)

(5) 스트림의 최종 연산

  • forEach()
    • peek()와 달리 스트림의 요소를 소모하는 최종 연산. 스트림의 요소를 출력하는 용도로 많이 사용됨
void forEach(Consumer<? super T> action)
  • 조건 검사 - allMatch(), anyMatch(), noneMatch(), findFirst(), findAny()
    • 스트림의 요소에 대해 지정된 조건에 대해 모든 요소 혹은 일부 요소가 일치하는지, 아니면 어떤 요소도 일치하지 않는지를 확인하는데에 사용
boolean allMatch(Predicate<? super T> predicate)
boolean anyMatch(Predicate<? super T> predicate)
boolean noneMatch(Predicate<? super T> predicate)
  • 통계 - count(), sum(), average(), max(), min()
    • 기본형 스트림에는 스트림의 요소들에 대한 통계 정보를 얻을 수 있는 위의 메서드들이 있음
    • 그러나 기본형이 아닌 스트림은 count(), max(), min()만 존재
    • 따라서 대부분의 경우 기본형 스트림으로 변환을 해서 통계 메서드를 사용하거나 reduce(), collect()를 사용해서 통계 정보를 얻음
  • 리듀싱 - reduce()
    • 스트림의 요소를 줄여나가면서 연산을 수행하고 최종 결과를 반환.
    • 초기값과 어떤 연산으로 스트림의 요소를 줄여나갈 것인지만 결정하면 됨

(6) collect()

  • collect() : 스트림의 요소를 수집하는 최종 연산, 앞에서 배운 리듀싱과 유사함
  • collect()가 스트림의 요소를 수집하려면 어떻게 수집할 것인가에 대한 방법이 정의되어야 함 -> 이를 정의한 것이 컬렉터
    • collect() : 스트림의 최종 연산, 매개변수로 컬렉터를 필요로 함
    • Collector : 인터페이스, 컬렉터는 이 인터페이스를 구현해야 함
    • Collectors : 클래스, static 메서드로 미리 작성된 컬렉터를 제공
  • 스트림을 컬렉션과 배열로 변환 - toList(), toSet(), toMap(), toCollection(), toArray()
  • 통계 - counting(), summingInt(), averagingInt(), maxBy(), minBy()
  • 리듀싱 - reducing()
  • 문자열 결합 - joining()
  • 그룹화와 분할 - groupingBy(), partitioningBy()
    • 그룹화 : 스트림의 요소를 특정 기준으로 그룹화
    • 분할 : 스트림의 요소를 두 가지, 지정된 조건에 일치하는 그룹과 일치하지 않는 그룹으로의 분할
    • 그룹화와 분할 둘 다 결과는 Map에 담겨 반환됨
    • 스트림을 두 개의 그룹으로 나눠야 한다면 분할이 더 빠름, 그 외에는 그룹화를 사용
// partitioningBy()에 의한 분류 + counting()을 활용한 통계 정보
Map<Boolean, List<Student>> stuBySex = stuStream.collect(patitioningBy(Student::isMale, counting()));

List<Student> maleStudent = stuBySex.get(true);
List<Student> femaleStudent = stuBySex.get(false);

// groupingBy()에 의한 분류
Map<Integer, List<Student>> stuByBan = stuStream.collect(groupingBy(Student::getBan, toList()));

(7) 스트림의 변환

  • 원서 참조
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글