Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从另一个范围中筛选出一个范围的数字_Java_Java Stream - Fatal编程技术网

Java 如何从另一个范围中筛选出一个范围的数字

Java 如何从另一个范围中筛选出一个范围的数字,java,java-stream,Java,Java Stream,我试图在Java8中创建一个IntStream,我想从中筛选出另一个范围。例如,如果我有以下数组: {1, 2, 3, 4, 5, 6, 7, ..., 20} 除了:{4,5,6,7} 我创建了以下IntStream: IntStream.rangeClosed(1, 20); 但是,我希望有可能做一些: IntStream.rangeClosed(1, 20).filter(IntStream.rangeClosed(4, 7)); 有没有办法做到这一点?显然,没有办法这么做,但我可能

我试图在Java8中创建一个IntStream,我想从中筛选出另一个范围。例如,如果我有以下数组:

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

我创建了以下IntStream:

IntStream.rangeClosed(1, 20);
但是,我希望有可能做一些:

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

有没有办法做到这一点?显然,没有办法这么做,但我可能弄错了。提前感谢您的回复

简单的范围检查有什么问题

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

简单的范围检查有什么问题

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

为什么不制作两条流和concat?1-3和8-20

这样做可以跳过对每个元素的检查

另一个建议是将其转换为两组,然后

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

range1.removeAll(range2);

为什么不做两条溪流和一杯咖啡呢?1-3和8-20

这样做可以跳过对每个元素的检查

另一个建议是将其转换为两组,然后

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

range1.removeAll(range2);

但可能他有过滤现有范围的要求,你不知道将来要删除的元素是的,可能是这样,但没有说明。所以我没有做任何假设。@Ghanshyam Bagul:我看不出
IntStream.concat(IntStream.range(1,4),IntStream.rangeClosed(8,20))
IntStream.concat(IntStream.range(r1,r2),IntStream.rangeClosed(e2+1,e1))
。谢谢。我确实知道我必须排除什么。这些价值观永远不会改变。所以我想我可以和康卡特一起去。但简言之,答案是否定的。你似乎无法从一个范围中删除另一个范围。@DigitalSelf添加了使用集合的建议。但他可能要求过滤现有范围,而你不知道将来要删除的元素。是的,可能是这样,但没有说明。所以我没有做任何假设。@Ghanshyam Bagul:我看不出
IntStream.concat(IntStream.range(1,4),IntStream.rangeClosed(8,20))
IntStream.concat(IntStream.range(r1,r2),IntStream.rangeClosed(e2+1,e1))
。谢谢。我确实知道我必须排除什么。这些价值观永远不会改变。所以我想我可以和康卡特一起去。但简言之,答案是否定的。你不能从一个范围中删除另一个范围,这似乎是一个自我添加的使用集合和其他银行的建议,我确实可以做到。谢谢,我确实可以做到。