다양한 데이터 소스( 컬렉션, 배열
)를 표준화된 방법으로 다루기 위한 것.
즉, 컬렉션 데이터 타입( List, Set, Map
), 배열 모두 Stream 으로 n번 중간연산이 가능하고 1번 최종 연산이 가능하다.
스트립 생성과정
Lisst<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);
IntStream intStream = new Random().ints(5); // 크기가 5인 난수 스트림
stream.distinct().limit(5).sorted().forEach(System.out::pringln)
String[] strArr = {"dd","aaa","CC","cc","b"};
Stream<String> stream = stream.of(strArr); // 문자열 배열이 소스인 스트림
Stream<String> filteredStream = stream.filter(); // 걸러내는 중간연산
Stream<String> distinctedStream = stream.distinct(); // 중복제거 중간연산
int total = stream.count(); // 요소 개수 세기 최종연산
strStream.forEach(System.out::pringln); // 모든 요소를 화면에 출력하는 최종연산 => 요소가 남아있지 않음
int numOfStr = strStream.count(); // => error 왜? 스트림이 이미 닫혔거든
IntStream intStream = new Random().ints(1,46); // 1 ~ 45 범위의 무한 스트림
intStream.idstinct().limit().sorted() // 중간연산
.forEach(i->System.out.print(i+",")); // 최종연산
.forEach
문은 최종연산임..parallel()
/ default는 .sequentail()
임IntStream, LongStream, DoubleStream