在查看了 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
。有没有更好/更简洁的方法来做到这一点?
编辑:
看来我可以利用Commons-collections 中的 IteratorUtils来免费获得skip
and collect
:
Iterator<MyUser> userIterator = IteratorUtils.boundedIterator(users.iterator(), offset, limit);
List<MyUser> aPageOfUser = IteratorUtils.toList(userIterator);