stream has already been operated upon or closed
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
at java.util.stream.IntPipeline.<init>(IntPipeline.java:91)
at java.util.stream.IntPipeline$StatefulOp.<init>(IntPipeline.java:619)
at java.util.stream.SliceOps$2.<init>(SliceOps.java:236)
at java.util.stream.SliceOps.makeInt(SliceOps.java:236)
at java.util.stream.IntPipeline.limit(IntPipeline.java:375)
at com.jcroad.j8.Streams.main(Streams.java:99)
代码:
/**
* .boxed() 的作用:
* DoubleStream 转成 Stream<Double>
* IntStream 转成 Stream<Integer>
* 。。。 等等相同功能
*/
//下面代码,功能是生成100个随机数。数字在0到100之间
Random random = new Random();
IntStream intStream = random.ints(0, 100);
IntStream limit = intStream.limit(100);
Stream<Integer> boxed = intStream.limit(100).boxed();
List<Integer> collect2 = boxed.collect(Collectors.toList());
Stream<Task> stream = tasks.stream();
这行代码报错:
Stream<Integer> boxed = intStream.limit(100).boxed();
原因:
一个 Stream 只可以使用一次
博客探讨了在Java中遇到的`IllegalStateException: stream has already been operated upon or closed`异常。代码示例展示了尝试对同一个`IntStream`进行多次操作,导致错误。问题在于Java Stream只能被使用一次,一旦执行了终端操作如`collect`,就不能再次使用。解决方案是确保每个Stream操作都在新的Stream实例上进行。

329

被折叠的 条评论
为什么被折叠?



