Ответ 1
int sizePerPage=2;
int page=2;
int from = Math.max(0,page*sizePerPage);
int to = Math.min(list.size(),(page+1)*sizePerPage)
list.subList(from,to)
У меня есть список объектов. Мне нужно сделать разбивку на страницы.
Входные параметры - это максимальный номер объекта на странице и номер страницы.
Например, вход list = ("a", "b", "c", "d", "e", "f")
Максимальное число на страницу равно 2
Номер страницы - 2
Результат = ( "c", "d" )
Есть ли готовые классы (libs) для этого? Например, проект Apache или так далее.
int sizePerPage=2;
int page=2;
int from = Math.max(0,page*sizePerPage);
int to = Math.min(list.size(),(page+1)*sizePerPage)
list.subList(from,to)
С Java-парами:
list.stream()
.skip(page * size)
.limit(size)
.collect(Collectors.toCollection(ArrayList::new));
Попробуйте:
int page = 1; // starts with 0, so we on the 2nd page
int perPage = 2;
String[] list = new String[] {"a", "b", "c", "d", "e", "f"};
String[] subList = null;
int size = list.length;
int from = page * perPage;
int to = (page + 1) * perPage;
to = to < size ? to : size;
if ( from < size ) {
subList = Arrays.copyOfRange(list, from, to);
}
Простой метод
public static <T> List<T> paginate(Page page, List<T> list) {
int fromIndex = (page.getNumPage() - 1) * page.getLenght();
int toIndex = fromIndex + page.getLenght();
if (toIndex > list.size()) {
toIndex = list.size();
}
if (fromIndex > toIndex) {
fromIndex = toIndex;
}
return list.subList(fromIndex, toIndex);
}
Попробуйте следующее:
int pagesize = 2;
int currentpage = 2;
list.subList(pagesize*(currentpage-1), pagesize*currentpage);
Этот код возвращает список только с теми элементами, которые вы хотите (страница).
Вы также должны проверить индекс, чтобы избежать java.lang.IndexOutOfBoundsException.
В соответствии с вашим вопросом простой List.subList
даст вам ожидаемое поведение size()/2 = количество страниц
Вы можете использовать List.subList
с помощью Math.min
для защиты от ArrayIndexOutOfBoundsException
:
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
int pageSize = 2;
for (int i=0; i < list.size(); i += pageSize) {
System.out.println(list.subList(i, Math.min(list.size(), i + pageSize)));
}