当前位置: 首页 > 知识库问答 >
问题:

线程“main”java.lang.IllegalStateException中的异常:流已被操作或关闭[重复]

石思淼
2023-03-14
    final Stream<String>stream = getStream().filter(a->StringUtils.contains(a,"http"));
    stream.filter(a->true);//LINE PROBLEM I JUST THOUGHT THAT THIS WOULD  JUST IGNORE
    System.out.println(stream.count());
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
stream.filter(a->true);//NOT A TERMINAL OPERATION A INTERMEDIATE OPERATION

如果我撕掉了它,就像这样使用我的代码

System.out.println(stream.filter(a->true).count());

不引发异常。

如果使用此代码,将引发NotException。

    Stream<String>stream = getStream().filter(a->StringUtils.contains(a,"http"));
    stream = stream.filter(a->true);
    System.out.println(stream.count());

共有1个答案

丁沛
2023-03-14

根据Javadoc:

一个流应该只被操作一次(调用中间或终端流操作)。例如,这排除了“分叉”流,即同一个源为两个或多个管道提供源,或者对同一个流进行多次遍历。如果流实现检测到正在重用该流,则可能引发IllegalStateException。然而,由于某些流操作可能返回其接收者而不是新的流对象,因此可能不可能在所有情况下检测重用。

为了避免这种情况,可以使用stream.builder

 类似资料: