티스토리 뷰

Java

[Java 8] - Stream Api

영지는 달리는중 2020. 8. 8. 14:27

Stream 배경

 

기존의 자바는 데이터에 접근을 하기 위해서는 배열 혹은 컬렉션 등에 저장된 데이터를 반복문 혹은 반복자를 통해서 접근해야 했다

그렇게 되면 코드의 양이 많아지고 재사용이 거의 불가능하다는 단점이 있다

 

이러한 문제점을 극복하기 위해 데이터를 추상화하여 다루고, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공하는 Stream이 생겨났다. 따라서 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 된다.

 

Stream의 특징

 

  1. 외부 반복을 통해 작업하는 컬렉션과는 달리 내부 반복으로 작업을 수행한다
  2. 스트림의 연산은 필터 - 맵 기반의 api 를 사용하여 지연 연산을 통해 성능을 최적화한다
  3. 스트림은 parallesStream() 메소드를 통한 손쉬운 병렬 처리를 지원한다

 

Stream 동작의 흐름 

데이터 소스 -> 매핑 -> 필터링 -> 결과 만들기 -> 결과물

데이터 소스로 스트림 인스턴스를  생성 후 필터링 및 패밍 등 원하는 결과를 위한 중간 작업(intermediate operation) 거친 후 최종적인 결과를 만들어내는 작업(terminal operations)을 통하여 작동한다

 

 

동작흐름 1 - Stream의 생성

  1. 배열 스트림 : array.Stream();
  2. 컬렉션 스트림: collection,list,set 등의 경우 인터페이스에 추가된 디폴트 메소드 stream()을 사용
  3. builder() , generate(),iterate()등 사용하여 원하는 값의 스트링 생성 가능
  4. Parallel Stream을 사용하여 생성한 스트림은 두 가지 이상의 작업을 수행 할 수 있다
Stream<Product> parallelStream = productList.parallelStream();

boolean isMany = parallelStream
  .map(product -> product.getAmount() * 10)
  .anyMatch(amount -> amount > 200);

- parallel Stream 사용 예제

 

 

동작흐름 2- Stream의 가공

  1. 스트림 필터링 : filter(), distinct()
  2. 스트림 변환 : map(),flatMap()
  3. 스트림 제한: limit(), skip()
  4. 스트림 정렬: sorted()
  5. 스트림 연산 결과 확인 : peek() 

 

동작흐름 3 - Stream 최종 연산

  1. 요소의 출력: foreach()
  2. 요소의 소모: reduce()
  3. 3. 요소의 검색 : findFirst(), findAny()
  4.  요소의 검사 : anyMatch(), allMatch(), noneMatch()
  5. 요소의 통계 : count(), min(), max()
  6. 요소의 연산 : sum(), average()
  7. 요소의 수집 : collect()
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함