스트림 (Stream)
- 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
1. 스트림 만들기
2. 중간 연산 (0~n번) : 연산결과가 스트림 O
3. 최종 연산 (1번) : 연산결과가 스트림 X
스트림의 특징
- 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐, 변경하지 않음 (Read Only)
- 스트림은 Iterator처럼 일회용임 (필요하면 다시 스트림 생성해야 함)
- 최종 연산 전까지 중간 연산이 수행되지 않음 (지연된 연산)
- 스트림은 작업을 내부 반복으로 처리함
- 스트림의 작업을 병렬로 처리 - 병렬 스트림
- 기본형 스트림 : IntStream, LongStream, DoubleStream
> 오토박싱 & 언박싱의 비효율이 제거됨 (Stream<Integer>대신 IntStream 사용)
> 숫자와 관련된 유용한 메서드를 Stream<T>보다 더 많이 제공
스트림 만들기 - 컬렉션
- Collection 인터페이스의 stream()으로 컬렉션을 스트림으로 변환
Stream<E> stream() // Collection 인터페이스의 메서드
스트림 만들기 - 배열
- 객체 배열로부터 스트림 생성하기
- 기본형 배열로부터 스트림 생성하기
스트림 만들기 - 임의의 수
- 난수를 요소로 갖는 스트림 생성하기
스트림 만들기 - 특정 범위의 정수
- 특정 범위의 정수를 요소로 갖는 스트림 생성하기 (IntStream, LongStream)
스트림 만들기 - 람다식 iterate(), generate()
- 람다식을 소스로 하는 스트림 생성하기
- iterate()는 이전 요소를 seed로 해서 다음 요소를 계산함
- generate()는 seed를 사용하지 않음
스트림 만들기 - 파일과 빈 스트림
- 파일을 소스로 하는 스트림 생성하기
- 비어있는 스트림 생성하기