在流期间强制等待或睡眠

Force a wait or sleep during stream

假设我有:

 list.stream()
     .map(someService::someRateLimitedApiCall) //does not implement Runnable
     .filter(Optional::isPresent)
     .map(Optional::get)
     .sleep(1000) //is something like this possible?
     .min...;

API 服务每秒只允许有限数量的交易,我想在调用之间引入延迟。

如果没有,有没有办法在流的迭代中添加一个固定延迟的执行器?

(声明一下,我没有违反对外API的条款,也不会滥用服务。)

简单的解决方案(没有并行流)是使用 peek 作为多个评论者的建议。因为它需要 Consumer:

.peek(i -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
})

与其使用 peek,不如将延迟放在调用 API 的地图操作中?

.map(e -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException ex) {
        return Optional.empty();
    }
    return someRateLimitedApiCall(e);
})