我试图在Java 8中创建一个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));
有没有办法这样做?显然,没有办法做到这一点,但我可能会弄错。在此先感谢您的回复
答案 0 :(得分:4)
简单范围检查有什么问题?
(b' -> c') -> (a' -> b') -> (a' -> c') -- composition
b' -> c' ~ a -> b -> (a,b) -- first argument (,)
a' -> b' ~ t n -> n -- second argument sum
----------------------------------------------------------------
a' ~ t n
b' ~ a ~ n
c' ~ a -> b -> (a,b)
----------------------------------------------------------------
a' -> c' ~ t a -> b -> (a,b)
答案 1 :(得分:1)
为什么不制作两个流并且连续? 1-3和8-20?
IntStream.concat(IntStream, IntStream)
通过这样做,您可以跳过对每个元素的检查。
另一个建议是将其转换为两组并执行
range1.boxed().collect(Collectors.toSet());
range2.boxed().collect(Collectors.toSet());
range1.removeAll(range2);