Если вы хотите, чтобы данные были разбиты на страницы как List
, вы можете легко получить представление подсписка одной страницы, используя Guava :
public <T> List<T> getPage(List<T> list, int pageIndex, int pageSize) {
return Lists.partition(list, pageSize).get(pageIndex);
}
Это не требует копирования или итерации (использует представления подсписков исходного списка) и обрабатывает последнюю страницу, которая прозрачно содержит менее pageSize
элементов.
Для произвольного Iterable
или Collection
я бы сделал это:
public <T> List<T> getPage(Iterable<T> iterable, int pageIndex, int pageSize) {
return Iterables.get(Iterables.partition(iterable, pageSize), pageIndex);
}
Предоставив оба этих метода, вы сможете эффективно обрабатывать объекты, которые, как известно, являются списками во время компиляции, и любой другой тип Iterable
настолько эффективно, насколько это возможно.