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条经验 获得超3个赞
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(...);
分享
添加回答
举报