好吧,我想了解是否可以使用流重写以下代码?如果有人可以解释为什么我们可以首先排除这里的流。
for (int i=0;i<size; i++) {
int j = i+1;
while (j<size && Math.abs(arr1[j]-arr1[i])<=k ) {
if (Math.abs(arr1[j]-arr1[i])==k) {
cnt++;
}
j++;
}
}
答案 0 :(得分:0)
问:...了解是否可以重写...
是的,有可能,但极不鼓励。请记住这一点,请记住,在大多数情况下,java-stream并不是for-loop的1:1替代。
问:...为什么我们可以首先排除这里的视频流...
这些流根本不适合索引重复使用或完全重用。 Streams的想法是monad,适合于遍历集合/数组一次并产生声明的输出。
有一种方法可以使用IntStream::range
来替代使用索引的数组的迭代,但是,它为解决方案带来了 no-real 的好处,而且冗长得多和较低的清晰度。最重要的是,我无法想象一个基本上不违反Streams的关键原则的解决方案:
java-stream的典型用例是过滤,平坦/映射,归约,收集到集合或组合成Map
(有或没有聚合操作用法等)……也适用于并行处理。