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();