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