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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章