← 질문 목록
#71깊이 0
중간 연산을 바로 실행하지 않는 이유는?
종료 연산이 요구할 때까지 미루면 여러 중간 연산을 한 번의 순회로 결합할 수 있다. 단락 종료로 필요한 원소만 처리할 수도 있다.
스트림 소스→중간 연산
실행하지 않고 단계를 기록한다
종료 연산→스트림 소스
원소 처리를 요구한다
스트림 소스→결과
필터와 변환을 한 순회로 적용한다
filter와 map 같은 상태 없는 연산은 원소 하나씩 이어서 처리한다. sorted와 distinct 같은 상태 있는 연산은 지연 실행이어도 버퍼를 쓸 수 있다.
findFirst와 anyMatch는 답이 정해지면 순회를 멈춘다. 무한 스트림도 그 전에 전체 입력을 요구하는 연산이 없다면 유한 시간에 끝날 수 있다.
스트림은 한 번만 소비할 수 있다. 공유 상태를 바꾸는 부수 효과는 지연 실행과 병렬 처리에서 순서와 안전성을 흐리므로 피해야 한다.