使用Java8流重写

时间:2019-05-08 04:00:56

标签: java java-8 iteration java-stream

好吧,我想了解是否可以使用流重写以下代码?如果有人可以解释为什么我们可以首先排除这里的流。

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++;
    }
}

1 个答案:

答案 0 :(得分:0)

  

问:...了解是否可以重写...

是的,有可能,但极不鼓励。请记住这一点,请记住,在大多数情况下,并不是的1:1替代。

  

问:...为什么我们可以首先排除这里的视频流...

这些流根本不适合索引重复使用或完全重用。 Streams的想法是monad,适合于遍历集合/数组一次并产生声明的输出。

有一种方法可以使用IntStream::range来替代使用索引的数组的迭代,但是,它为解决方案带来了 no-real 的好处,而且冗长得多和较低的清晰度。最重要的是,我无法想象一个基本上不违反Streams的关键原则的解决方案:

  • 无干扰
  • 无状态行为
  • 无副作用

的典型用例是过滤,平坦/映射,归约,收集到集合或组合成Map(有或没有聚合操作用法等)……也适用于并行处理。