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

时间:2016-05-29 14:48:49

标签: 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);

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

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

1 个答案:

答案 0 :(得分:5)

在这一行

Supplier filteredSupplier = () -> Stream.of(filteredStream.toArray(Obj[]::new));

有两个流:filteredStreamStream.of(...)返回的流。

每次调用get的{​​{1}}方法都会调用Supplier,因此会创建新的流。但是,每次通话都会使用相同的Stream.of(...)。第二次调用filteredStream时,Supplier将无法正常工作,因为filteredStream信息流用完了“#{1}}在第一次电话会议期间。

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

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

这只使用filteredStream一次,无论您拨打Supplier get方法多少次。

相关问题