【发布时间】:2017-08-01 08:11:13
【问题描述】:
我想遍历一个巨大的数组并执行一组需要很长时间的复杂指令。但是,如果超过 30 秒,我希望它放弃。
例如
final long start = System.currentTimeMillis();
myDataStructure.stream()
.while(() -> System.currentTimeMillis() <= start + 30000)
.forEach(e ->
{
...
});
如果满足特定条件,我想避免在 forEach 调用中只说 return。
【问题讨论】:
-
stackoverflow.com/questions/41392286/… 这是一个示例答案,也许对你有帮助。
-
如果您正在计算副作用的变化并在之后应用它们(假设计算比应用昂贵得多),您可以使用
Collector的特殊实现,当超时。 -
此外,Java 9 Streams 将有一个新的
takeWhile方法,这可能正是您所要求的。 -
问题...复杂的指令是 IO-bound 还是 CPU-bound?
标签: java java-8 java-stream