java.lang.IllegalStateException: stream has already been operated upon or closed

1. 错误描述

static int [] intArr = new int[]{30,96,23,69,85,62,12,99,11};
IntStream intStream =Arrays.stream(intArr);
int sum = intStream.sum();
int max = intStream.max().getAsInt();
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.IntPipeline.reduce(Unknown Source)
    at java.util.stream.IntPipeline.max(Unknown Source)
    at com.niubashaoye.java.demo.ArraySort.main(ArraySort.java:14)

2. 错误原因

stream has already been operated upon or closed意思stream已经被使用或关闭了;

jdk8 API:http://www.matools.com/api/java8

流只能运行(调用中间或终端流操作)一次。 这排除了例如“分叉”流,其中相同的源提供两条或多条流水线,或同一流的多遍。 如果流实现可能会丢失IllegalStateException如果它检测到该流被重用。 然而,由于一些流操作可能返回其接收器而不是新的流对象,所以在所有情况下可能无法检测到重用。

3. 解决方案

static int [] intArr = new int[]{30,96,23,69,85,62,12,99,11};
IntStream intStream =Arrays.stream(intArr);
int sum = intStream.sum();
intStream =Arrays.stream(intArr);
int max = intStream.max().getAsInt();

 

发布了401 篇原创文章 · 获赞 130 · 访问量 85万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章