This question already has answers here:
Java 8 Stream IllegalStateException: Stream has already been operated on or closed

(6个答案)


3年前关闭。




我需要计算大列表的两个部分的比率,其中第一部分包含第二个部分:

Stream<Element> part1 = list.stream().filter(x -> x.getN1() < x.getN2);
int result = part1.filter(y -> y.isRight()).count() / part1.count();


但是此代码引发异常:java.lang.IllegalStateException:流已被操作或关闭

是否可以在不创建相同part1流的情况下编写代码?

最佳答案

您只能重复使用具有结果记忆的集合。

List<Element> part1 = list.stream().filter(x -> x.getN1() < x.getN2).collect(toList());
double result = (double) part1.stream().filter(y -> y.isRight()).count() / part1.size();


流是一些在运行时进行了优化的代码的构建器。它的执行不像看起来那样动态。

09-05 19:25