Посмотрев о том, как PaginatedList работает в SDK , кажется, что наиболее эффективный способ - это использовать ITERATION_ONLY
стратегию загрузки пагинации в конфигурации и сделать что-то вроде этого:
DynamoDBMapperConfig config = new DynamoDBMapperConfig.Builder()
.withPaginationLoadingStrategy(ITERATION_ONLY)
.build();
PaginatedQueryList<MyUser> users = dynamoDBMapper.query(MyUser.class, myQueryExpression, config);
// This iterator will fetch 1MB worth of data 'on-demand'
Iterator<MyUser> userIterator = users.iterator();
skip(iterator, offset);
List<MyUser> aPageOfUser = collect(iterator, limit);
Конечно, я возьму на себя расходы по реализации моего собственного метода skip
и collect
.Есть ли лучший / более краткий способ сделать это?
EDIT:
Кажется, я могу использовать IteratorUtils из commons-collection , чтобы иметь skip
иcollect
бесплатно:
Iterator<MyUser> userIterator = IteratorUtils.boundedIterator(users.iterator(), offset, limit);
List<MyUser> aPageOfUser = IteratorUtils.toList(userIterator);