Java 8 收集时出现非法异常

Java 8 收集时出现非法异常,java-8,java-stream,illegalstateexception,Java 8,Java Stream,Illegalstateexception,我正在尝试执行嵌套的流循环。当我在列表中收集结果时,它抛出“非法状态异常”,声明steam已关闭 public void execute(Stream<Trade> trade, Stream<Order> order){ order.filter(o -> trade.anyMatch(t -> t.getInstrumentId() == o.getInstrumentId() && t.getGroupid() == o.g

我正在尝试执行嵌套的流循环。当我在列表中收集结果时,它抛出“非法状态异常”,声明steam已关闭

public void execute(Stream<Trade> trade, Stream<Order> order){

  order.filter(o -> trade.anyMatch(t -> t.getInstrumentId() == 
   o.getInstrumentId() && t.getGroupid() == o.getGroupId()))
   .collect(Collectors.toList());// Illegal exception only when i include this line

}
public void execute(流式交易、流式订单){
order.filter(o->trade.anyMatch(t->t.getInstrumentId()=
o、 getInstrumentId()&&t.getGroupid()==o.getGroupid())
.collect(Collectors.toList());//仅当包含此行时出现非法异常
}
异常为:java.lang.IllegalStateException:流已被操作或关闭

我知道我们不应该多次使用流,但在这种情况下,我只是过滤然后收集。。在筛选之前,它不会显示错误,但在收集时会抛出此异常。

  • order
    流只使用一次

  • 交易
    蒸汽不可用

对于
order
流的每个元素,您都需要根据
trade
的内容检查一个条件,但是您只能迭代一次,问题就在这里


您可以传递
集合
,而
交易流则来自该集合。

订单流的每个元素都会调用传递给filter()的回调谓词。因此,您为订单的每个元素调用trade.anyMatch()。这不止一次。你知道你不能那样做。