Java 如何从另一个范围中筛选出一个范围的数字
我试图在Java8中创建一个IntStream,我想从中筛选出另一个范围。例如,如果我有以下数组: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)); 有没有办法做到这一点?显然,没有办法这么做,但我可能
{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))
。谢谢。我确实知道我必须排除什么。这些价值观永远不会改变。所以我想我可以和康卡特一起去。但简言之,答案是否定的。你不能从一个范围中删除另一个范围,这似乎是一个自我添加的使用集合和其他银行的建议,我确实可以做到。谢谢,我确实可以做到。