Stream 정리

J-Keonho·2020년 8월 31일
0

Stream : 람다를 활용하여 내부반복자를 사용하여 시간을 줄일 수 있다.
(jdk 8.0 이후에 추가된 API)

  • 병렬처리 (multi-threading)이 가능하다.
  • 대용량의 데이터들을 빠르게 처리할 수 있다.

Stream 방식
1. 생성하기 : Stream 인스턴스 생성
2. 가공 : Filtering, Mapping 등을 이용하여 가공
3. 결과 : 결과 작업

Stream 생성

  • Collection( List, Map, Set )의 경우 Collection.stream() 으로 쉽게 생성
  • 배열의 경우 Arrays.stream(arr, 첫번째 위치, 마지막 위치)을 이용하여 생성
  • 매개변수의 경우 Stream.of(a, b, c, d) 의 방식으로 스트림을 생성
  • iterate을 통해 스트림에 내부 요소를 생성할 수 있다.
    ex) Stream st2 = Stream.iterate(30, n -> n+2).limit(10);
  • 빈 스트림의 경우 Stream.empty() 으로 생성

Stream 가공

  • 필터 (filter, distinct)

    • filter() : 해당 스트림에서 주어진 조건(predicate)에 맞는 요소만으로 구성된 새로운 스트림을 반환
    • distinct() : 해당 스트림에서 중복된 요소가 제거된 새로운 스트림을 반환
  • 변환 (map, flatMap) : 스트림의 요소를 다른 요소로 대체할 수 있는 기능

    • map() : 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 반환
    • flatMap() : Array나 Object로 감싸져 있는 모든 원소를 단일 원소 스트림으로 반환
  • 제한 (limit, skip)

    • limit() : 해당 스트림의 첫 번째 요소부터 전달된 개수만큼의 요소만으로 이루어진 새로운 스트림을 반환
    • skip() : 해당 스트림의 첫 번째 요소부터 전달된 개수만큼의 요소를 제외한 나머지 요소만으로 이루어진 새로운 스트림을 반환
  • 정렬 (sorted)

  • 결과 확인 (peek)

    • peek() : 결과 스트림으로부터 요소를 소모하여 추가로 명시된 동작을 수행

Stream 결과

  • 출력 (forEach)

  • 소모 (reduce)

    • reduce() : 첫 번째와 두 번째 요소를 가지고 연산을 수행한 뒤, 그 결과와 세 번째 요소를 가지고 또다시 연산을 수행
  • 검색 (findFirst, findAny)

    • findFirst()와 findAny() : 해당 스트림에서 첫 번째 요소를 참조하는 Optional 객체를 반환

    • Optional : 집계확인

      • isPresent() : 값 존재 여부 확인
      • orElse(a) : a를 기본값으로 지정
      • ifPresent(Consumer) : 값이 존재하면 Consumer에서 처리
  • 검사 (anyMatch, allMatch, noneMatch)

    • Match() : 요소 내용 조건 검사
      • allMatch(Predicate p) : 모든 내용이 조건을 만족하면 true
      • anyMatch(Predicate p) : 내용 중 하나라도 조건을 만족하면 true
      • noneMatch(Predicate p) " 내용 중 하나라도 만족하지 않으면 true
        ★ 객체를 확인하기 위해 instanceof을 이용한다.
  • 통계 (count, min, max)

  • 연산 (sum, average)

  • 수집 (collect)

    • Collectors : 수집메서드
      • Collection.collect(Collectors.toList()) : list로 수집
      • Collection.collect(Collectors.toSet()) : set으로 수집
      • Collection.groupingBy() : 조건에따라 묶어서 객체를 저장

★ 추가로

  • Collection.parallelStream() : 스트림의 병렬처리
  • Stream.concat(Stream 1, Stream2) : 스트림의 연결
  • Stream.reduce() : 스트림의 요소들을 다른 방법으로 결합하고 싶은 경우는 reduce 메서드들 중 하나를 사용하면 된다.
profile
안녕하세요.

0개의 댓글