Перейти к документации
Java

Пагинация

Одна страница, все страницы или по одному элементу.

Одна страница

OnePage.java
RequestOptions inbox = RequestOptions.of("folder", "inbox").limit(25);Page page = client.threads().list(inbox); for (Map<String, Object> thread : page) {    System.out.println(thread.get("id") + " " + thread.get("subject"));} if (page.hasMore()) {    Page next = client.threads().list(inbox.cursor(page.nextCursor()));     System.out.println(next.size());}

Метод list возвращает Page с items(), hasMore() и nextCursor(), и цикл for обходит её элементы. Передайте nextCursor() обратно как cursor, с теми же фильтрами, чтобы прочитать следующую страницу.

Все страницы

EveryPage.java
List<Map<String, Object>> contacts = client.contacts().listAll(); System.out.println(contacts.size());

Метод listAll идёт по курсору до конца и возвращает все элементы в одном List. Сбой на любой странице приводит к сбою всего вызова.

По одному элементу

Iterate.java
for (Map<String, Object> thread : client.threads().iterate(RequestOptions.of("query", "invoice"))) {    if (Boolean.TRUE.equals(thread.get("hasUnread"))) {        System.out.println(thread.get("id"));         break;    }} long starred = client.threads().iterate(RequestOptions.of("labelIds", "STARRED")).stream().count(); System.out.println(starred);

Метод iterate возвращает PagedIterable, который запрашивает следующую страницу, только когда цикл до неё доходит, поэтому break останавливает запросы. stream() даёт тот же обход в виде Stream, а toList() собирает его.

Итератор останавливается, когда API повторяет курсор, по которому он уже прошёл, поэтому обход никогда не может зациклиться.