我有这个片段:
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());
Stream<String>stream = getStream().filter(a->StringUtils.contains(a,"http"));
stream = stream.filter(a->true);
System.out.println(stream.count());
但为什么筛选器抛出异常而不是终端操作?
我只是使用最简单的代码来获得这个想法。
我使用的是Netbeans 8.2和Java 8 update 122也在Intellij Idea 2018 Ultimate中测试过。
根据stream
javadoc:
一个流只应被操作一次(调用中间或终端流操作)。例如,这排除了“分叉”流,即相同的源提供两个或多个管道,或者相同流的多个遍历。如果流实现检测到流正在被重用,则可能引发IllegalStateException。然而,由于某些流操作可能返回它们的接收器而不是新的流对象,因此可能不可能在所有情况下检测重用。
若要避免这种情况,可以使用stream.builder
如果我撕掉了它,就像这样使用我的代码 不引发异常。 如果使用此代码,将引发NotException。
方法是 现在我试着像这样改成stream,但我不知道这种改是否正确: 如何避免出现例外,解决问题? 我应该以某种方式重构代码吗?
我在线程“main”java中遇到异常。错误:未解析编译。 我做错了什么? 线程“main”中出现异常: java.lang.错误:未解决的编译问题: 对于类型在
问题内容: 我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。 如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。 问题答案: 答案在(重点是我的)的javadoc中: 流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同
下面是我的代码: 从下面的函数调用上面的函数: 我不知道为什么。