溪流已经运营或关闭 - 供应商没有帮助

Try*_*ry1 1 java java-stream

我是Java 8流编码的新手.这是一段代码,我正在尝试运行.

Supplier filteredSupplier = () -> Stream.of(filteredStream.toArray(Obj[]::new));
Stream.concat((Stream<Obj>)filteredSupplier.get(), Stream.of(objs)).forEach(some operation);
Run Code Online (Sandbox Code Playgroud)

据我所知,如果您使用供应商,您可以使用供应商的get()函数随时使用流.我仍然得到" 流已经被操作或关闭 ".

请帮助我理解,使用来自供应商的流是否有任何限制?

Luk*_*ard 5

在这一行

Supplier filteredSupplier = () -> Stream.of(filteredStream.toArray(Obj[]::new));
Run Code Online (Sandbox Code Playgroud)

有两个流:filteredStream和一个返回的流Stream.of(...).

get对您的方法的每次调用Supplier都会导致调用Stream.of(...)并因此创建新的流.但是,每次通话都会使用相同的filteredStream.Supplier第二次调用它时,您将无法工作,因为filteredStream在第一次调用期间流已"用完".

要避免异常,请尝试使用以下内容替换上面的行:

    Obj[] array = filteredStream.toArray(Obj[]::new);
    Supplier<Stream<Obj>> filteredSupplier = () -> Stream.of(array);
Run Code Online (Sandbox Code Playgroud)

这将使用filteredStream只有一次,不管你有多少次调用Supplier的get方法.