2017-03-01 1 views

답변

39

:

거의 모든 경우에, 터미널 작업은 열망 반환 전에 파이프 라인의 데이터 소스 및 가공 자신의 통과를 완료. 터미널 작업 iterator()spliterator() 만이 아닙니다. 기존 작업이 작업에 충분하지 않은 경우 임의의 클라이언트 제어 파이프 라인 통과를 가능하게하는 "이스케이프 해치"로 제공됩니다. 아니지만 iterator()spliterator() 경우의 단말 동작을 반환 할 때, 대부분의 경우 스트림의 탐색이 완료되었음을 의미

이러한 단말기 동작 Iterator 또는 Spliterator 중 하나를 사용하여 반환되지만 파이프 라인은 여전히 ​​"열린"상태이며 반복기를 통해 요소가 요청 될 때 처리됩니다. 이 방법을 사용하면 스트림 처리는 다음 요소가 요청 된 경우에만 스트림에 대한 작업이 실행되기 때문에 느린이됩니다. iterator() 메서드를 호출 할

Iterator<Person> iterator = persons 
    .stream() 
    .filter(p -> !p.getName().equals("Mike Tyson")) 
    .iterator(); 

후, 스트림은 "종료"됩니다 : 당신은 할 수 없습니다 체인 더 방법. 그러나 반환 된 반복자의 next() 메서드를 호출하여 스트림의 요소에 액세스 할 수 있으며 스트림은 처음 수행 할 때만 처리되기 시작합니다. 그리고 이는 iterator() 또는 spliterator() 터미널 작업이 사용되는 경우에만 해당됩니다.