2010-12-27 13 views
7

したがって、IterableIteratorListがあります。 「ページ」で結果を返すリモートサービスによって提供される機能をカプセル化するために、他のJavaコードへのインターフェイスを提供しようとしている場合はどうしますか?java:ページング結果のデザインパターン

例として、データベースまたはウェブページ(例:flickr API)を考えてみましょう。結果を最初に取得した後は、合計結果数と最初のN結果がわかりますが、残りの結果を取得するまで残りの結果はわかりません。

答えて

0

私はnext()のイテレータの実装では、結果の次のページをダウンロードすることですIterator<ListPage>を、実施することを決定した、とListPageは、実際のリストと結果の合計#などのメタデータを返すメソッド、ページごとに#を持ち、ページ番号、合計ページ数:

public interface ListPage<T> { 
    public List<T> getList(); 
    public int getTotal(); 
    public int getPage(); 
    public int getPages(); 
    public int getPerPage(); 
} 
4

それぞれの要素が高価であるため、結果を集計して、削除の呼び出しレベルで各要素を直接反復しないことをお勧めします。オフセット

List<YourClass> getResults(int offset, int maxResults) 

は、あなたがしてmaxresultsから開始する最初の要素のインデックスになりますあなたがしたい要素の最大数は、次のとおりです。

次のようなリストを返す一つの方法を提供することができリスト内のその後、リストを反復してページに表示することができます。

setFirstResult() 
setMaxResults() 
List getResultList() 

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

2

私はIteratorインターフェースに準拠とどまる、と紹介しません:

れるJava Persistence APIも同じパターンに従って

は、クエリインタフェースは、上記の操作を行う3つの方法を提供します新しい方法(上記のように)。代わりに hasElements()nextElement()、クラスゲッターで lazy loadingを使用します。私のアプリケーションで