IntStream::noneMatch의 Javadoc을 읽었습니다.IntStream :: noneMatch가 스트림의 모든 요소에서 조건자를 평가할 수 있습니까?
은 말한다 :이 스트림의 어떤 요소가 제공 조건과 일치하지
반환 여부를 지정합니다. 결과 판별에 필요하지 않은 경우 모든 요소에 대한 술어를 평가할 수 없습니다. 스트림이 비어 있으면 true를 반환하고 조건자를 평가하지 않습니다.
noneMatch
스트림의 모든 요소에 술어를 평가하고 어디에 noneMatch
false를 반환하는 경우 (참 반환하지 않습니다있는 실제 시나리오가 있는지 궁금 해서요,이 술어 만 평가되는 것이 분명하다 첫 번째 경기가 발견 될 때까지 요소에).
내가 생각할 수있는 유일한 시나리오는 스트림 파이프 라인에 술어가 noneMatch
의 술어와 정확히 일치하는 필터가있는 경우 아마도 어떤 요소도 테스트하지 않고 noneMatch
이 true를 반환한다는 것입니다. 다음 코드를 테스트 할 때
그러나 :
boolean out = IntStream.range(1, 10000)
.filter(i -> i % 2 == 0)
.peek(System.out::println)
.noneMatch(i -> i % 2 == 1);
System.out.println(out);
I는 9998 2부터 짝수의 출력을 얻을 : 전체 스트림을 의미
가2
4
6
...
9998
true
평가, 비록 필터는 정수만 반환하며, noneMatch
의 조건부는 홀수 인 정수가 필요하지 않으므로 요소를 평가하지 않고 true를 반환 할 수 있어야합니다.
그래서 Javadoc이 May not evaluate on all elements.
이라고하면 noneMatch
이 false를 반환하는 경우 만 참조할까요?
편집 :
난 그냥 내 질문은 명확히 싶어이 하지 이유가 게시 된 코드는 전체 스트림을 평가한다. 제 질문은 전체 스트림을 평가하지 않고 noneMatch
이 의 결과를으로 반환하는 시나리오가 있는지 여부입니다..
음, * 힘을 * 일 이후 버전 모순 검출 할 수있는 경우에 당신은 당신의 코드를 변경하는 경우 예를 들어
, '술어'. 아니면 미래의 API는'Stream.filter'에 전달 될 때 인식 될'Predicate.matchNone' 상수를가집니다. 또는'map' 연산이 입력에 의존하지 않는 함수를 가질 때 인식 할 수 있습니다 (이 경우 단일 요소를 검사하면 전체 결과를 결정할 수 있습니다). – Holger