Я впервые работаю с Spring Reactor, и я столкнулся со следующей проблемой:
У меня есть служба, которая позволяет использовать количество записей, определяемых номером страницы и размером страницы:
Mono<GetContactsForGroupResponse> getContactsForGroup(Integer page, Integer size);
Среди других полей GetContactsForGroupResponse содержит метаданные разбиения на страницы:
class GetContactsForGroupResponse {
private int totalPages;
private int totalElements;
private int numberOfElements;
private int size;
private int number;
private boolean first;
private boolean last;
//.....
}
Теперь мне нужно написать другой метод, который будет читать все страницы из
Mono<GetContactsForGroupResponse> getContactsForGroup(Integer page, Integer size);
и объединять результаты в одна коллекция:
Mono<Collection<GetContactsForGroupResponse>> getContactsForGroup();
Пока что я написал:
List<GetContactsForGroupResponse> groupContacts = new ArrayList<>();
AtomicBoolean allPagesConsumed = new AtomicBoolean(false);
int pageNumber = 0;
int pageSize = 10;
while(!allPagesConsumed.get()) {
allPagesConsumed.set(true);
GetContactsForGroupResponse getContactsForGroupResponse =
getContactsForGroup(accountId, g.getId(), 0, pageSize).block();
Optional.ofNullable(getContactsForGroupResponse)
.ifPresent(r -> {
allPagesConsumed.set(r.isLast());
groupContacts.add(r);
});
pageNumber ++;
Я читаю результаты постранично, пока не достигну последней страницы. Интересно, каков правильный способ реализации с точки зрения SpringReactor
Буду признателен за любой совет,
Спасибо