Stream
- Java8 부터 추가
- Collection에 대해 동작
- 개별 요소들을 하나씩 참조해서 함수적으로(lambda) 처리
- 개별 요소들을 읽기만 하고 변경하지 않음
- 처리 결과를 새로운 컬렉션에 담아 리턴가능
- 내부 반복자를 사용해 병렬처리 용이
External Interator
- 직접 코드로 Collection의 요소를 가져와 처리
Internal Interator
- Collection 내부에서 Iterator를 통해서 요소를 가져와 처리
- 병렬 처리 가능하도록 구현되어 있음
- 중간처리와 최종처리 가능
Consumer<String> consumer;
while(iterator.hasNext()){
String el = iterator.next();
consumer.accept(el);
}
stream.forEach(consumer);
메서드
- 중간 연산(Intermediate Operations) : 최종연산이 호출될때까지 지연
- 최종 연산: 중간 연산한 결과들 처리(반복, 카운팅, 평균, 합치기)
Stream(Interface)
java.util.stream
extends AutoCloseable
, extends BaseStream<T, Stream<T>>
생성하기
collection.stream() -> Stream<T>
: From Collection
Arrays.stream(T[] arr) -> Stream<T>
, Stream.of(T[] arr, int start, int end)
: From Array
Stream.of(T ... values) -> Stream<T>
static methods
Stream.empty() -> Stream
: 빈 스트림
methods
Filter
filter(Predicate<T>) -> Stream<T>
Map
map(Function<T,R>) -> Stream<R>
Flat Map
flatMap(Function<T,Stream<R>> mapper) -> Stream<R>
Sorting
sorted(Comparator<T>) -> Stream<T>
Else
distinct() -> Stream<T>
: 중복 제거
peek(Consumer<T>) -> Stream<T>
limit(long maxSize) -> Stream<T>
skip(long n) -> Stream<T>
count() -> long
: 요소 개수