使用 Spring Data 和分页遍历所有结果

dri*_*den 5 spring spring-data

我正在调用分页服务,我可以使用如下代码遍历所有分页集合:

Pageable pageable = PageRequest.of(0,100);
Page<Event> events = eventsService.getEventsPage(pageable);
while(!events.isLast()) {
    doStuff(events)
    events = eventsService.getEventsPage(events.nextPageable())
}
doStuff(events) // rest of events
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?我需要分页,否则系统将耗尽内存。

Stu*_*uck 2

我觉得必须声明doStuff两次服务电话在某种程度上是脆弱的。如果当前页面已经是最后一页,您可以利用nextPageable()将为您提供单例的事实。unpaged

Pageable pageable = PageRequest.of(0,100);
do {
    Page<Event> events = eventsService.getEventsPage(pageable);
    doStuff(events)
    pageable = events.nextPageable();
} while(pageable.isPaged())
Run Code Online (Sandbox Code Playgroud)

这是 的文档nextPageable()。

 /**
 * Returns the {@link Pageable} to request the next {@link Slice}. Can be {@link Pageable#unpaged()} in case the
 * current {@link Slice} is already the last one. Clients should check {@link #hasNext()} before calling this method.
 *
 * @return
 * @see #nextOrLastPageable()
 */
Pageable nextPageable();
Run Code Online (Sandbox Code Playgroud)

Pageable#unpaged()将返回一个返回 的单false例isPaged()。