java.lang.IllegalStateException:stream已经被操作或关闭

时间:2014-08-12 18:17:22

标签: java scala java-8 java-stream

我正在使用Java 8流进行培训,尝试实现与此Scala代码相同的逻辑,我也写道:

def solution = {
        var s   = "input" 
        var n   = Math.sqrt(s.length / 3).toInt
        val arr = s.split("\\s+").map(_.toInt)

        def prod(index : Int, count : Int = 4)(inc : Int) : Int = 
            if (count > 0) arr(index)*prod(index + inc,count - 1)(inc) else 1

        def prodInRange(rows : Seq[Int], cols : Seq[Int])(inc : Int) = 
            for (i <- rows ; j <- cols) yield prod(n*i + j)(inc)

        val seq = prodInRange(0 to 19,0 to 16)(  1  ) ++ prodInRange(0 to 16,0 to 19)(  n  ) ++ 
                  prodInRange(0 to 16,0 to 16)(n + 1) ++ prodInRange(3 to 19,0 to 16)(1 - n)
        seq.max
    }

我在Java中实现了prod,没有什么特别之处,方法解决方案也完全相同。但是,我在prodInRange遇到了困难。我将其更改为maxProdInRange,它不仅应计算所有产品,还应计算其最大值。这是代码:

public static int maxProdInRange(IntStream rows, IntStream cols, int inc, List<Integer> input) {
        int n = (int) Math.sqrt(input.size());
        return rows.flatMap(i -> cols.map(j -> prod(i*n + j,inc,input))).max().getAsInt();
}

尽管如此,我在调用maxProdInRange时遇到异常(见标题)。根据我试图调试它的测试,它只在我调用max()时才会出现。首先,我想知道为什么我会收到这个错误(我认为它来自对Java流的误解)以及解决它的方法。

请注意,在maxProdInRange的所有调用中都有maxProdInRange(IntStream.range(a,b),IntStream.range(a,b),input)格式,因此当作为参数传递时,行和列都不会被操作。

0 个答案:

没有答案