JAVA - 스트림

이상해씨·2022년 7월 30일
0

웹 풀스택(JAVA)

목록 보기
14/54

✔스트림

데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소

1) 연속된 요소 : filter, sorted, map 등 데이터 처리를 위한 계산식이 주를 이룸.
2) 데이터 처리 연산 : filter, map, find, match, sort 등 함수형 프로그래밍, 데이터베이스와 비슷한 연산 제공.

  • 스트림의 특징
    • 데이터 원본을 변경하지 않는다.
    • 스트림은 일회용이다. (최종 연산을 진행하면 자동 종료.)
  • 스트림의 장점
    • 반복자를 사용할 필요가 없다.(forEach() 사용)
    • 병렬 처리 용이.

1. 중간 연산(Intermediate Operation)

  1. 스트림 자르기
    • skip(n) : n 만큼의 요소 건너띄기.
    • limit(n) : n 만큼의 요소로 자르기.
  2. 스트림 요소 걸러내기
    • distinct() : 반복된 요소를 제거하고 선택.
      • equals, hashcode 재정의 필요
    • filter(Predicate< ? super T > predicate) : 조건을 통해 선택.
  3. 정렬
    • sorted(Comparator< ? super T > comparator) : 특정 요소를 통해 정렬.
  4. 변환
    • map(Function< ? super T, ? extends R > mapper) : 요소를 변환하여 반환.
  5. 조회
    • peek(Consumer< ? super T > action) : 연산 중간 결과를 확인할 때 사용.
  6. 통계 정보 : 총합, 평균, 최대값, 최소값 등 (mapToInt(), mapToLong(), mapToDouble() 활용)
    • IntSummaryStatistics stat = stream().mapToInt(INTEGER).summaryStatistics()
      • stat.getSum(), stat.getAverage(), stat.getMax(), stat.getMin()

2. 최종 연산(Terminal Operation)

  1. forEach() : 반복 연산
  2. 조건 검사 :
    • allMatch(Predicate ...) : 모든 요소가 조건을 만족하는지. boolean
    • anyMatch(Predicate ...) : 어떤 요소가 조건을 만족하는지. boolean
    • nonMatch(Predicate ...) : 모든 요소가 조건을 만족하지 않는지. boolean
    • findFirst() : 현재 스트림의 첫 요소 반환(순서 확인).
    • findAny() : 스트림을 처리할 때 가장 먼저 찾은 요소 반환(순서 미확인).
      • 대용량 데이터를 사용할 때 parallelStream을 사용해 병렬 처리하고 findAny()는 이 경우 사용.
  3. 통계 : count(), sum(), average(), max(), min()
    • IntStream과 같은 기본형 스트림에서 호출 가능.
  4. 리듀싱 : 스트림의 요소를 줄여가면서 연산 수행 후 최종 결과 반환.
    • 두 요소를 하나의 요소로 반환
    • reduce( res, BinaryOperator< T > ) : res와 스트림 요소로 연산 진행.(res = res와 요소 연산 반복. 최종적으로 res 반환.)
  5. 스트림 -> 컬렉션, 배열 변환
    • collect(Collector< ? super T, A, R > collector) : 컬렉션 변환
      • (ex) collect(Collectors.toList())
    • toArray(Function<A[]> generator) : 배열 변환
      • (ex) toArray(ClassName[]::new)
profile
후라이드 치킨

0개의 댓글