【发布时间】:2018-02-09 13:02:40
【问题描述】:
谁能帮我解释一下为什么这个案子会例外?
IntStream i = IntStream.of(6,5,7,1, 2, 3, 3);
IntStream d = i.map(n -> n+1 );
d.forEach(System.out::print);
System.out.println();
System.out.println("Origional Streams" );
i.forEach(System.out::print);
这是输出。
7682344
Origional Streams
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.sourceStageSpliterator(AbstractPipeline.java:279)
at java.util.stream.IntPipeline$Head.forEach(IntPipeline.java:557)
【问题讨论】:
-
我打赌这将被关闭为重复...
d.forEach然后i.forEach调用两个终端操作... -
我也 d.close();也给出了同样的错误。两个 IntStream 上都有终端操作,我认为它们是线程安全的。
-
是的,有两个终端操作.. 你打电话给
forEach两次。线程安全与此有什么关系? -
@Eugene 你能建议我解决这个问题吗?你不认为有两个流。 ?每个都独立运行??
-
您为此创建一个供应商...
Supplier<IntStream> sup = () -> IntStream.of(6, 5, 7, 1, 2, 3, 3);并随时致电sup.get()以获取新的IntStream
标签: collections java-8 java-stream