我需要计算大列表的两个部分的比例,其中第一部分包含第二部分:
Stream<Element> part1 = list.stream().filter(x -> x.getN1() < x.getN2);
int result = part1.filter(y -> y.isRight()).count() / part1.count();
但是此代码抛出异常: java.lang.IllegalStateException:stream已经被操作或关闭
我可以编写代码而无需在结果中创建相同的 part1 流吗?
答案 0 :(得分:1)
您只能重复使用集合,因为它会记录结果。
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();
Stream是某些代码的构建器,在运行时进行了优化。它的执行并不像它看起来那么动态。
答案 1 :(得分:0)
Streams不应该被重用,或者如果你想要一些东西,你可以使用这里提到的供应商:Copy a stream to avoid "stream has already been operated upon or closed" (java 8)