728x90
    
    
  개념
- 스트림 데이터는 처리 과정에서 임시로 존재합니다.
 - 스트림은 필요한 작업을 수행한 후 자동으로 소멸합니다.
 - 데이터 소스 원본을 변경하지 않고도 데이터를 처리할 수 있습니다.
 
구성
- 스트림 생성
 - 중개 연산
- 스트림을 받아서 스트림을 반환합니다.
 - 여러개의 중개 연산을 수행할 수 있습니다.
 - 중개 연산은 일반적으로 지연 연산입니다.
 
 - 최종 연산
- 스트림의 결과를 산출합니다.
 - 이때 지연 연산으로 미뤄진 중개 연산을 수행합니다.
 - 최종 연산 이후 스트림은 소멸합니다.
 
 
특징
- 스트림은 각 요소의 처리 방법에 관심을 두고 있습니다.
 - 개발자가 반복문을 구현해서 요소에 접근 --> 외부 반복
 - 스트림은 내부적으로 각 요소마다 접근 --> 내부 반복
 
- 파이프-필터 패턴
- 스트림은 데이터에 대해서 각종 중개 연산(필터) 후 최종 연산으로 결과를 산출합니다.
 
 - 지연 연산
- 지연 연산은 어떤 값이 사용되기 전까지 연산을 미뤄두는 것입니다.
 - 각 필터에서는 중개 연산이 이뤄집니다.
 - 중개 연산은 미뤄지다가 최종 연산이 시작되면 처리됩니다.
 - 지연 연산으로 메모리를 절약할 수 있고, 성능에서 이익을 얻을 수 있습니다.
 
 - 재사용 불가
- 최종 연산이 이뤄지면 스트림은 자동으로 소멸합니다.
 
 
종류
BaseStream: 모든 스트림 API의 상위 객체Stream<T>: T 타입 데이터 처리 스트림DoubleStream: dobule 타입 데이터 처리 스트림IntStream: int 타입 데이터 처리 스트림LongStream: long 타입 데이터 처리 스트림생성방법
- 데이터 소스의 종류에 따라 생성방법이 다릅니다.
 
컬렉션(Collection)- Collection 인터페이스에 있는 
stream(),parallelStream() 
- Collection 인터페이스에 있는 
 - 배열
- Arrays의 
stream(T[] array) - 기본 데이터 타입의 스트림은 
**Stream.of(T[] array)도 가능 
 - Arrays의 
 - 범위
- 범위를 사용할 때에는 정수만 가능
 IntStream,LongStreamrange(int start, int end): 요소에 end를 포함하지 않고 스트림을 생성rangeClosed(int start, int end): 요소에 end를 포함해서 스트림을 생성
 - 가변길이 인자
- 스트림에 포함할 요소를 하나하나 파라미터로 넣어줄 수 있음
 - 모든 스트림에서 
of( ... )로 해당 타입의 스트림 생성 
 
BaseStream 인터페이스
- 모든 스트림 API에서 구현하는 기본 스트림 객체입니다.
 - 모든 스트림 API가 공통으로 사용하는 메서드가 있습니다.
 
Stream 인터페이스
- 객체 타입의 데이터를 처리하기 위한 스트림 API입니다.
 collect,count,filter,forEach,map,max,min,reduce,sorted,toArray등의 메서드가 있습니다.Optional 클래스
- 스트림 연산의 결과값을 가지는 컨테이너 객체입니다.
 - 연산 결과 값이 있을 수도 있고, 없을 수도 있습니다.
 OptionalDouble,OptionalInt,OptionalLong클래스 등도 있습니다.
기본 타입 스트림
DoubleStream,IntStream,LongStreamaverage,count,distinct,max,min,skip(long n),sorted,sum등의 메서드가 있습니다.- 생성방법
Arrays.stream(T[] array)**Stream.of(T[] array)
 
병렬 스트림
- 병렬 처리는 요소를 부분적으로 처리한 후 각 결과를 결합해서 최종 결과를 도출합니다.
 - 병렬 스트림 생성
- Collection 객체 
parallelStream() - 배열 객체 
**Stream.of(T[] array).parallel() 
 - Collection 객체 
 
활용
- 매핑 : 기존 스트림 요소를 map()의 인자인 람다식으로 변경해서 새로운 스트림을 생성합니다.
 - 컬렉션 변환 : 스트림을 Collection 객체로 변경합니다. collect()의 인자인 Collector를 이용해서 변경할 컬렉션 타입을 정합니다.
 - 반복자 : 모든 요소에 접근할 수 있는 
Iterator,Spliterator(병렬 처리)객체를 생성합니다. 
'Language | Basic > Java' 카테고리의 다른 글
| Java의 Garbage Collection (0) | 2021.05.28 | 
|---|---|
| JVM의 Heap Area (0) | 2021.05.28 | 
| JVM(Java Virtual Machine)이란 (0) | 2021.05.28 | 
| Lambda와 함수형 인터페이스 (0) | 2021.05.18 | 
| java.lang.String의 Static Methods (0) | 2020.05.08 |