如何使用项目反应器实现调用重复,直到满足特定条件?

How to implement a call repetition until a certain condition is met using project reactor?

有没有什么方法可以使用项目反应堆来做这样的事情?

fetchSystemUpdates() // return Mono<List<>>
   .repeatUntil(List::isNotEmpty)
   .map(...) // when its not empty do some processing

实现它的一种方法是使用 expand 重复请求,直到收到 non-empty 列表并过滤掉下游的空结果。

fetchSystemUpdates()
        // repeat until results are not empty
        .expand(res -> {
            if (!res.isEmpty()) {
                return Mono.empty(); // stop "repeat loop"
            }

            return fetchSystemUpdates()
                // add delay before making subsequent call  
                .delaySubscription(Duration.ofMillis(1000));
        })
        .filter(res -> !res.isEmpty()) // filter out non-empty results
        .single() // convert Flux to Mono
        .map(...); // when its not empty do some processing
    }