美文网首页
Java8 教程第九章之Stream 异常处理

Java8 教程第九章之Stream 异常处理

作者: PrimaryKeyEnoch | 来源:发表于2019-08-12 22:10 被阅读0次

本套JAVA8教程由于是有英文翻译过来的,如果有翻译不对的地方还请多多包涵。

本节课先简单的介绍下Java8有哪些新特性,对于Java6/7版本做出哪些更改.那废话不多说,赶紧开始今天的课程吧.

对于经常使用Stream的小伙伴来说,异常是必不可少的,尤其是下面这一条,最为常见!
stream has already been operated upon or closed
下面看个例子吧,怎么就报错了呢

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

在运行时会出现以下异常

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)

其实看到这个错误,有的人会想到response的那个错误,哈哈,其实这个错误就是流已经被操作或关闭因为它只能消费一次,所以才会报错的
那么下面看下怎么解决吧

   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);
        //重新获取一个新的stream
        streamSupplier.get().forEach(System.out::println);
        //获取一个别的新的stream
        long count = streamSupplier.get().filter("b"::equals).count();
        System.out.println(count);
    }

其实解决方式就是通过streamSupplier函数重新获取一个新的流即可.
其实关于Stream的问题还有很多, 以后我会专门写个错误篇章来发布.

已经更新了好几篇文章了,小伙伴们学会了吗?
是不是已经对java8已经有了很深的了解了

相关文章

  • Java8 教程第九章之Stream 异常处理

    本套JAVA8教程由于是有英文翻译过来的,如果有翻译不对的地方还请多多包涵。 本节课先简单的介绍下Java8有哪些...

  • Java8之Stream流(六)收集

    Java8之Stream流(一)基础体验 Java8之Stream流(二)关键知识点 Java8之Stream...

  • 怎么break java8 stream的foreach

    怎么break java8 stream的foreach 简介 我们通常需要在java stream中遍历处理里面...

  • Stream API

    Stream是Java8中用于处理集合的API,利用函数式编程的思想方便的处理Java的集合类. 创建Stream...

  • Stream类的collect方法

    上篇Java8之Stream类限于篇幅,所以把Stream的collect方法单独拿出来写一篇文章。Stream ...

  • Java 8 Stream--开发手册

    什么是Java8 Stream,为什么需要Stream? Stream是Java8一大亮点,它与 java.io ...

  • Java8 Stream API

    Stream API是Java8中处理集合的关键组件,提供了各种丰富的函数式操作。 Stream的创建 任何集合都...

  • Java8 新特性(二)- Stream

    Stream 用来处理集合数据的,通过 stream 操作可以实现 SQL 的拥有的大部分查询功能 Java8 A...

  • Stream基础知识

    Stream API Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,但是将执...

  • 【Java 8实战笔记】为什么要关心Java 8

    概述部分 使用Java8新的API,流(Stream),它支持许多处理数据的并行操作,由Stream库来选择最佳低...

网友评论

      本文标题:Java8 教程第九章之Stream 异常处理

      本文链接:https://www.haomeiwen.com/subject/vovsjctx.html