3 回答

TA貢獻1812條經驗 獲得超5個贊
一旦條件為真,流就會被消耗而且我不能重用它
中間操作(例如map)返回一個新流,因此您需要在中間操作()之后重新分配流map。
IE
DoubleStream stream = object.getvalueStream(a,b);
if (condition) {
stream = stream.map(v -> v * 2);
}
stream.forEach(value -> {
// do something
}
注意終端操作(例如foreach)不返回流。所以如果你想要很多終端操作,你應該收集流以便可以重復使用。
另請注意,如果您希望鏈接( ) 調用,還有一個foreachcalled的中間版本。peekforeachpeek

TA貢獻1872條經驗 獲得超4個贊
Streams在 Java 中不能被重用。您應該將collect結果和流式傳輸兩次
List<Double> doubles = object.getvalueStream(a,b).boxed().collect(toList());
if(condition) {
doubles = doubles.stream().map(v -> v * 2).boxed().collect(toList);
}
// and further processing here
doubles.stream().forEach(v ->
...
);

TA貢獻1895條經驗 獲得超7個贊
如果保留流而不收集流對您很重要,則可以使用 map() 。這種方法的唯一缺點是每次都必須檢查條件
DoubleStream stream = object.getvalueStream(a,b).map(v-> condition ? v*2 : v).forEach(...);
或者只是將正確的 Stream 分配給變量
DoubleStream stream = condition ? object.getvalueStream(a,b).map(v->v*2) : object.getvalueStream(a,b).map(v->v*2).forEach(...);
分享
添加回答
舉報