Paginierung
Eine Seite, alle Seiten oder ein Eintrag nach dem anderen.
Eine Seite
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());}Eine list-Methode gibt eine Page mit items(), hasMore() und nextCursor() zurück, und eine for-Schleife durchläuft ihre Einträge. Übergeben Sie nextCursor() als cursor, mit denselben Filtern, um die nächste Seite zu lesen.
Alle Seiten
List<Map<String, Object>> contacts = client.contacts().listAll(); System.out.println(contacts.size());Eine listAll-Methode folgt dem Cursor bis zum Ende und gibt jeden Eintrag in einer List zurück. Ein Fehler auf einer beliebigen Seite lässt den ganzen Aufruf scheitern.
Ein Eintrag nach dem anderen
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);Eine iterate-Methode gibt ein PagedIterable zurück, das die nächste Seite erst anfordert, wenn die Schleife sie erreicht, sodass ein break die Anfragen beendet. stream() liefert denselben Durchlauf als Stream, und toList() sammelt ihn ein.
Ein Iterator hält an, wenn die API einen Cursor wiederholt, dem er bereits gefolgt ist, sodass ein Durchlauf nie endlos kreisen kann.