2016-08-14 54 views
0

我需要計算的大列表,由兩個部分的比例,其中所述第一部分包含所述第二:重用流中的Java 8

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

但這代碼拋出異常:java.lang.IllegalStateException :流已在運行或關閉

我能寫代碼,而不在結果相同第一部分流?

回答

0

您只能重複使用一個集合,因爲它可以記憶結果。

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(); 

流是一些在運行時優化的代碼的構建器。它的執行不像它看起來那樣動態。