我是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()函数随时使用流.我仍然得到" 流已经被操作或关闭 ".
请帮助我理解,使用来自供应商的流是否有任何限制?
在这一行
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方法.