java:分页结果的设计模式

Jas*_*n S 8 java design-patterns iterable

因此,有IterableIteratorList.如果您尝试提供其他Java代码的接口,以便封装由"页面"返回结果的远程服务提供的功能,您会使用什么?

例如,考虑数据库或网页(例如flickr API).在第一次检索结果后,您知道结果的总数和前N个结果,但在检索其余结果之前,您不知道剩余的结果.

jbx*_*jbx 5

在您的情况下,假设每个元素的检索成本很高,那么获取聚合结果可能是有意义的,而不是在删除调用级别直接迭代每个元素.

您可以提供一个返回List的方法,如下所示:

List<YourClass>  getResults(int offset, int maxResults)
Run Code Online (Sandbox Code Playgroud)

其中offset是您要开始的第一个元素的索引,maxresults是您希望在列表中拥有的最大元素数.然后,您可以迭代列表以显示在页面中.

Java Persistence API也遵循相同的模式,Query接口提供了3种执行上述操作的方法:

setFirstResult()
setMaxResults()
List getResultList()
Run Code Online (Sandbox Code Playgroud)

http://download.oracle.com/javaee/5/api/javax/persistence/Query.html


Jas*_*n S 1

在我的应用程序中,我决定实现Iterator<ListPage>,其中迭代器的实现next()是下载下一页结果,并ListPage具有返回真实列表和元数据(如结果总数、每页数、页数和总数)的方法。页面:

public interface ListPage<T> {
    public List<T> getList();
    public int getTotal();
    public int getPage();
    public int getPages();
    public int getPerPage();
}
Run Code Online (Sandbox Code Playgroud)