一尘不染

Java 8流-超时?

java

我想遍历一个巨大的数组并执行一组复杂的指令,这需要很长时间。但是,如果超过30秒,我希望它放弃。

例如

final long start = System.currentTimeMillis();
myDataStructure.stream()
    .while(() -> System.currentTimeMillis() <= start + 30000)
    .forEach(e ->
    {
      ...
    });

我想避免只returnforEach通话中说出是否满足特定条件。


阅读 215

收藏
2020-12-03

共1个答案

一尘不染

与实际执行操作相比,如果在这种情况下迭代流或数组便宜,那么不仅仅使用谓词和筛选时间是否结束。

final long end = System.nanoTime() + TimeUnit.SECONDS.toNanos(30L);
myDataStructure.stream()
    .filter(e -> System.nanoTime() <= end)
    .forEach(e ->
    {
      ...
    });

问题是您是否需要知道哪些元素已被处理。通过以上内容,您之后必须检查特定元素是否发生了副作用。

2020-12-03