我是Java 8流编码的新手。 这是一段代码,我正在尝试运行。
Supplier filteredSupplier = () -> Stream.of(filteredStream.toArray(Obj[]::new));
Stream.concat((Stream<Obj>)filteredSupplier.get(), Stream.of(objs)).forEach(some operation);
据我所知,如果您使用供应商,则可以使用供应商处的get()函数随时使用流。我仍然得到“流已经被操作或关闭”。
请帮助我理解,使用来自供应商的流是否有任何限制?
答案 0 :(得分:5)
在这一行
Supplier filteredSupplier = () -> Stream.of(filteredStream.toArray(Obj[]::new));
有两个流:filteredStream
和Stream.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
方法多少次。