Использование java paging

У меня есть список объектов. Мне нужно сделать разбивку на страницы.
Входные параметры - это максимальный номер объекта на странице и номер страницы.

Например, вход list = ("a", "b", "c", "d", "e", "f")
Максимальное число на страницу равно 2 Номер страницы - 2 Результат = ( "c", "d" )

Есть ли готовые классы (libs) для этого? Например, проект Apache или так далее.

Ответ 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)

Ответ 2

С Java-парами:

list.stream()
  .skip(page * size)
  .limit(size)
  .collect(Collectors.toCollection(ArrayList::new));

Ответ 3

Попробуйте:

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);
}

Ответ 4

Простой метод

  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);
  }

Ответ 5

Попробуйте следующее:

int pagesize = 2;
int currentpage = 2;
list.subList(pagesize*(currentpage-1), pagesize*currentpage);

Этот код возвращает список только с теми элементами, которые вы хотите (страница).

Вы также должны проверить индекс, чтобы избежать java.lang.IndexOutOfBoundsException.

Ответ 6

В соответствии с вашим вопросом простой List.subList даст вам ожидаемое поведение   size()/2 = количество страниц

Ответ 7

Вы можете использовать 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)));
}