Question

Alors il y a Iterable et Iterator et List. Qu'est-ce que vous utilisez si vous essayez de fournir une interface à tout autre code Java, afin de fonctionnalité encapsulent fournies par un service à distance qui renvoie les résultats dans les « pages »?

À titre d'exemple, envisager une base de données ou une page Web (par exemple flickr API ). Après la première recherche de résultats, vous connaissez le # total des résultats et les premiers résultats de N, mais vous ne savez pas les résultats restants jusqu'à ce que vous récupérez le reste.

Était-ce utile?

La solution 3

Dans ma demande, j'ai décidé de mettre en œuvre Iterator<ListPage>, où la mise en œuvre de next() du iterator est de télécharger la page suivante des résultats et ListPage a des méthodes qui renvoient la vraie liste et les métadonnées comme # total de résultats, # par page, la page # et # total de pages:

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

Autres conseils

Dans votre cas, étant donné que chaque élément est coûteux à récupérer, il est probablement logique de prendre les résultats globaux et non itérer directement pour chaque élément à supprimer le niveau d'invocation.

Vous pourriez fournir une méthode qui retourne une liste comme ceci:

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

où décalage serait l'indice du premier élément que vous voulez partir et maxresults est le nombre maximum d'éléments que vous voulez avoir dans la liste. Vous pouvez ensuite itérer sur la liste à afficher dans votre page.

L'API Java Persistence suit également le même schéma, l'interface de requête fournit 3 méthodes qui font ci-dessus:

setFirstResult()
setMaxResults()
List getResultList()

http://download.oracle.com/javaee/ 5 / api / javax / persistance / query.html

Je resterais conforme à l'interface Iterator, sans introduire de nouvelles méthodes (comme suggéré ci-dessus). Au lieu de cela, j'utiliser le chargement à hasElements(), nextElement() et vos apporteurs de classe.

scroll top