JAVA-STREAM : 重复使用double a DoubleStream
JAVA-STREAM : re-use double a DoubleStream
我需要一个技巧来解决这个问题,我正在使用 Java 1.8 我从 return 一个 DoubleStream 对象的方法中检索了一个对象。所以,问题是流被消耗后我无法重用它。
这是代码的第一个版本:
DoubleStream stream = object.getvalueStream(a,b);
if(condtion)
stream.map(v -> v * 2);
stream.forEach(value -> {
// do something
}
问题是,一旦条件为真,流就被消耗掉了,我不能重新使用它。所以我尝试使用供应商来 return 来自供应商的 doubleStream 并迭代公开它。
但当我尝试从已使用的流对象中恢复流时,问题仍然存在。
这是我更新的代码:
DoubleStream stream = object.getvalueStream(a,b);
if(condtion)
stream.map(v -> v * 2);
Supplier>DoubleStream> streamSupplier = () -> DoubleStream.of(stream.toArray());
streamSupplier.get().forEach(value -> {
//Do something
但我仍然遇到同样的问题,因为如果条件为真,我会从已经使用的流中创建我的供应商。
感谢您的帮助。
Streams
in 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 ->
...
);
如果保留流而不收集流对您很重要,则可以使用 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(...);
once the condition is true, the stream is consumed And I can not reuse it
中间操作(例如map
)return一个新的流,因此需要在中间操作后重新分配流(map
).
即
DoubleStream stream = object.getvalueStream(a,b);
if (condition) {
stream = stream.map(v -> v * 2);
}
stream.forEach(value -> {
// do something
}
注意 终端 操作(例如 foreach
)不 return 流。所以如果你想要很多终端操作,你应该收集流以便可以重复使用。
另请注意,如果您希望链接 foreach
(peek
) 调用,还有一个名为 peek
的 foreach
中间版本。
我需要一个技巧来解决这个问题,我正在使用 Java 1.8 我从 return 一个 DoubleStream 对象的方法中检索了一个对象。所以,问题是流被消耗后我无法重用它。
这是代码的第一个版本:
DoubleStream stream = object.getvalueStream(a,b);
if(condtion)
stream.map(v -> v * 2);
stream.forEach(value -> {
// do something
}
问题是,一旦条件为真,流就被消耗掉了,我不能重新使用它。所以我尝试使用供应商来 return 来自供应商的 doubleStream 并迭代公开它。
但当我尝试从已使用的流对象中恢复流时,问题仍然存在。
这是我更新的代码:
DoubleStream stream = object.getvalueStream(a,b);
if(condtion)
stream.map(v -> v * 2);
Supplier>DoubleStream> streamSupplier = () -> DoubleStream.of(stream.toArray());
streamSupplier.get().forEach(value -> {
//Do something
但我仍然遇到同样的问题,因为如果条件为真,我会从已经使用的流中创建我的供应商。
感谢您的帮助。
Streams
in 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 ->
...
);
如果保留流而不收集流对您很重要,则可以使用 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(...);
once the condition is true, the stream is consumed And I can not reuse it
中间操作(例如map
)return一个新的流,因此需要在中间操作后重新分配流(map
).
即
DoubleStream stream = object.getvalueStream(a,b);
if (condition) {
stream = stream.map(v -> v * 2);
}
stream.forEach(value -> {
// do something
}
注意 终端 操作(例如 foreach
)不 return 流。所以如果你想要很多终端操作,你应该收集流以便可以重复使用。
另请注意,如果您希望链接 foreach
(peek
) 调用,还有一个名为 peek
的 foreach
中间版本。