I would like to make paginated database calls in-parallel/asynchronous each page returning unique results. I am using project-reactor with java-8. With below code somehow its fetching duplicate records in some pages. When I query each page directly on DB, I get unique set of results in each page.
List<Mono<List<User>>> usersMonos = new ArrayList<>();
IntStream.range(1, 5).forEach(i -> {
usersMonos.add(Mono.fromSupplier(() -> {
int from = (1 + (10000 * (i - 1)));
int to = 10000 * i;
List<User> users = userMapper.getPaginatedUser(userId, from, to);
return users;
}));
});
List<User> allPageUsers = Flux.zip(usersMonos, new UserTransformer())
.collectList()
.block()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());