1. 정의
- 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Stream5 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> intStream = list.stream();
Stream<String> strStream = Stream.of(new String[]{"a", "b", "c"});
Stream<Integer> evenStream = Stream.iterate(0, n -> n + 2);
Stream<Double> randomSTream = Stream.generate(Math::random);
}
}
2. 특징
- 스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐 변경 안 함
- 스트림은 iterator처럼 일회용 (필요하면 다시 생성)
- 최종 연산 전까지 중간 연산이 수행되지 않음
- 기본형 스트림 : IntStream, LongStream, DoubleStream
- 오토박싱 & 언박싱 비효율 제거 == Stream〈Integer〉 대신 IntStream 사용
- 숫자와 관련된 유용한 메서드를 Stream〈T〉 보다 더 많이 제공
3. 생성
- 컬렉션으로부터 스트림 생성하기
- 배열로 스트림 생성하기
- 특정 범위의 정수를 요소로 갖는 스트림 생성
- 람다식을 소스로 하는 스트림 생성
Stream<Integer> intStream = list.stream()
Stream<String> strStream = Stream.of("a", "b", "c")
IntStream intStream = IntStream.range(1, 5)
Stream<Integer> evenStream = Stream.iterate(0, n -> n + 2)
4. 중간연산
5. 최종연산
6. Collect(), Collector
- collect()는 collector를 매개 변수로 하는 스트림의 최종 연산
- toList(), toSet(), toMap()
List<String> names = StudentStream.map(Student::getName).collect(Collector.toList())