【发布时间】:2022-10-07 22:53:29
【问题描述】:
我在 Java 中使用 Project Reactor。我将如何以反应方式编写这个阻塞while循环?
Flux<Instant> findHistory() {
int max = 10;
Instant lastSeenTime = Instant.now();
List<Instant> instants = new ArrayList<>();
AtomicInteger pageNumber = new AtomicInteger(1);
while (instants.size() < max) {
List<Instant> block =
getHistory(pageNumber.getAndIncrement())
.filter(instant -> instant.isBefore(lastSeenTime))
.collectList()
.block();
instants.addAll(block);
}
return Flux.fromIterable(instants);
}
Flux<Instant> getHistory(int pageNumber) {
// returns the page of Instants
}
我想继续调用getHistory,将过滤后的结果添加到我的列表instants,直到该列表的大小为max。我曾尝试使用repeatWhen 和expand,但还没有弄清楚如何使用它们来实现这个while 循环的作用。
【问题讨论】:
-
我自己无法对此进行测试,因此我不会将其写为完整答案,但作为提示,我认为您想使用
.take(max)
标签: java reactive-programming repeat reactive