스트림이란 컬렉션(또는 배열)의 요소를 람다식으로 처리하는 반복자
스트림의 특징은 람다식
, 내부반복자
, 중간처리와 최종처리
3가지가 있다.
스트림에서 제공하는 메소드는 대부분 함수적 인터페이스를 매개변수로 가지기 때문에 람다식으로 표현할 수 있다.
직접 요소들을 반복
하고, 요소당 처리해야할 코드
를 제어컬렉션 내부에서 요소들이 반복되
고, 요소당 처리해야할 코드만
전달스트림을 사용할 수 있는 스트림 소스의 종류는 다음이 있다.
new ArrayList().stream()
Arrays.stream(arr)
IntStream.rangeClosed(1, 100) //1 부터 100까지의 정수 범위의 스트림
Files.lines(path, Charset.defaultCharset()); // 해당 path의 파일의 라인을 스트림에 저장
Files.list(path); // path의 파일 또는 디렉토리 하위의 정보를 가져옴.
파이프라인이란 여러 개의 스트림이 연결되어 있는 구조
를 뜻한다.
중간처리를 담당 하는 중간 스트림
과 최종 처리를 담당하는 최종 스트림
을 연결하게 되고, 이러한 구조를 파이프라인
이라 한다.실행되는 시점에 처리하지 않고
기다렸다가, 그 값이 실제로 필요할 때 처리
하는 것을 뜻한다.if( fn1() || fn2() ){
start();
}
자바에서 || 연산은 lazy 방식으로 처리된다. 즉, 위의 예제에서는
반대로 || 연상이 lazy방식이 아닌 eager방식이라고 가정한다면 어떻게 될까?(lazy evaluation의 반대를 eager evaluation이라 한다.)
이렇게 lazy방식은 fn1()만 실행하면 되지만, eager방식은 fn1()과 fn2()를 모두 실행하게 된다.
따라서 lazy방식을 사용하는 stream은 성능상의 이점이 있다.
이것이 자바다 - 신용권 (한빛미디어)