Java8 教程第九章之Stream 異常處理

本套JAVA8教程由于是有英文翻譯過來的,如果有翻譯不對的地方還請多多包涵。

本節(jié)課先簡單的介紹下Java8有哪些新特性,對于Java6/7版本做出哪些更改.那廢話不多說,趕緊開始今天的課程吧.

對于經(jīng)常使用Stream的小伙伴來說,異常是必不可少的,尤其是下面這一條,最為常見!
stream has already been operated upon or closed
下面看個(gè)例子吧,怎么就報(bào)錯(cuò)了呢

public static void main(String[] args) {
        String[] array = {"a", "b", "c", "d", "e"};
        Stream<String> stream = Arrays.stream(array);
        // stream for
        stream.forEach(System.out::println);
        // reuse it to filter again! throws IllegalStateException
        long count = stream.filter("b"::equals).count();
        System.out.println(count);
    }

在運(yùn)行時(shí)會(huì)出現(xiàn)以下異常

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.ReferencePipeline.<init>(ReferencePipeline.java:94)
    at java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:618)
    at java.util.stream.ReferencePipeline$2.<init>(ReferencePipeline.java:163)
    at java.util.stream.ReferencePipeline.filter(ReferencePipeline.java:162)
    at Java82.main(Java82.java:21)

其實(shí)看到這個(gè)錯(cuò)誤,有的人會(huì)想到response的那個(gè)錯(cuò)誤,哈哈,其實(shí)這個(gè)錯(cuò)誤就是流已經(jīng)被操作或關(guān)閉因?yàn)樗荒芟M(fèi)一次,所以才會(huì)報(bào)錯(cuò)的
那么下面看下怎么解決吧

   public static void main(String[] args) {
        String[] array = {"a", "b", "c", "d", "e"};
        Stream<String> stream = Arrays.stream(array);
        Supplier<Stream<String>> streamSupplier = () -> Stream.of(array);
        //重新獲取一個(gè)新的stream
        streamSupplier.get().forEach(System.out::println);
        //獲取一個(gè)別的新的stream
        long count = streamSupplier.get().filter("b"::equals).count();
        System.out.println(count);
    }

其實(shí)解決方式就是通過streamSupplier函數(shù)重新獲取一個(gè)新的流即可.
其實(shí)關(guān)于Stream的問題還有很多, 以后我會(huì)專門寫個(gè)錯(cuò)誤篇章來發(fā)布.

已經(jīng)更新了好幾篇文章了,小伙伴們學(xué)會(huì)了嗎?
是不是已經(jīng)對java8已經(jīng)有了很深的了解了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容