2016-10-27 1 views
0

다른 범위를 필터링 할 Java 8에서 IntStream을 만들려고합니다. 나는 다음과 같은 배열이있는 경우 예를 들어, : 나는 다음과 같은 IntStream 만들어 {4, 5, 6, 7}다른 범위의 숫자 범위를 필터링하는 방법

:

{1, 2, 3, 4, 5, 6, 7, ..., 20} 

내가 모든 제외하고 계속하고 싶습니다 그러나

IntStream.rangeClosed(1, 20); 

를, 내가 좋아하는 것 어떤 일을 할 가능성 :

IntStream.rangeClosed(1, 20).filter(IntStream.rangeClosed(4, 7)); 

이렇게 할 수있는 방법이 있습니까? 분명히, 그렇게 할 방법이 없지만 나는 틀릴 수도 있습니다. 답장을 미리 보내 주셔서 감사합니다.

답변

4

간단한 범위 검사에는 어떤 문제가 있습니까?

IntStream.rangeClosed(1, 20).filter(i -> i < 4 || i > 7) 
+0

감사하는 것입니다. – DigitalSelf

1

두 스트림과 연결을 만들지 않는 이유는 무엇입니까? 1-3과 8-20? 각 요소에 대한 검사를 건너 뛸 것을 이렇게함으로써

IntStream.concat(IntStream, IntStream)

. 나는 실제로 그렇게 할 수

또 다른 제안은 두 세트로 변환하고

range1.boxed().collect(Collectors.toSet()); 
range2.boxed().collect(Collectors.toSet()); 

range1.removeAll(range2); 
+0

그러나 그가 미래에 제거 될 요소를 알지 못하는 기존 범위를 필터링해야한다는 요구가있을 수 있습니다. –

+0

예일 수도 있지만 명시되지 않았습니다. 그래서 나는 아무 것도하지 않았다. –

+0

@Ghanshyam Bagul : 'IntStream.concat (IntStream.range (1,4), IntStream.rangeClosed (8,20))'과 'IntStream.concat (IntStream.range (r1, r2), IntStream.rangeClosed (e2 + 1, e1))'입니다. – Holger