【问题标题】:streams illegal exception while collecting收集时流非法异常
【发布时间】:2018-07-13 02:38:08
【问题描述】:

我正在尝试执行流的嵌套循环。当我在列表中收集结果时,它会抛出“非法状态异常”,说明 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

}

异常是:java.lang.IllegalStateException:流已经被操作或关闭

我知道我们不应该多次使用流,但在这种情况下,我只是过滤然后收集.. 直到过滤它不会显示错误,但在收集时会引发此异常。

【问题讨论】:

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

标签: java-8 java-stream illegalstateexception


【解决方案1】:
  • order 流被使用一次

  • tradesteam 不是

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

您可以通过 Collection 来代替 trade 流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多