Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/12/2013, 20:14
LuisChavezB
 
Fecha de Ingreso: diciembre-2011
Mensajes: 152
Antigüedad: 12 años, 4 meses
Puntos: 34
Respuesta: Estuctura para paginar

Es algo difícil de entender tu código, deberías de ponerlo con las etiquetas code.
Si te sirve de algo te dejo una implementacion genérica que yo cree.

Código Java:
Ver original
  1. public interface Paginable<T> {
  2.    
  3.     public Paginator<T> paginate(int perPage);
  4. }

Código Java:
Ver original
  1. import java.util.List;
  2. import java.util.Iterator;
  3.  
  4. public class Paginator<E> {
  5.  
  6.     private final int perPage;
  7.     private final List<E> collection;
  8.     private int currentPage = -1;
  9.  
  10.     public Paginator(int perPage, List<E> collection) {
  11.         this.perPage = 1 > perPage ? 1 : perPage;
  12.         this.collection = collection;
  13.     }
  14.  
  15.     public int pages() {
  16.         if (null == this.collection || 0 == this.collection.size()) {
  17.             return 0;
  18.         }
  19.  
  20.         return (int) Math.ceil((double) this.collection.size() / this.perPage);
  21.     }
  22.  
  23.     public int currentPage() {
  24.         return this.currentPage + 1;
  25.     }
  26.  
  27.     public boolean hasNext() {
  28.         return currentPage + 1 < this.pages();
  29.     }
  30.  
  31.     public boolean hasPrevious() {
  32.         return currentPage - 1 > 1;
  33.     }
  34.  
  35.     public Iterator<E> items() {
  36.         if (-1 == this.currentPage) {
  37.             throw new IllegalStateException("the pagination is not been initialized");
  38.         }
  39.  
  40.         return new Iterator<E>() {
  41.  
  42.             private final int firstIndex = perPage * currentPage;
  43.             private final int lastIndex = firstIndex + perPage;
  44.             private int index = firstIndex;
  45.  
  46.             @Override
  47.             public boolean hasNext() {
  48.                 int newIndex = index + 1;
  49.  
  50.                 return newIndex <= lastIndex && newIndex <= collection.size();
  51.             }
  52.  
  53.             @Override
  54.             public E next() {
  55.                 return collection.get(index++);
  56.             }
  57.         };
  58.     }
  59.  
  60.     public Iterator<E> next() {
  61.         if (this.hasNext()) {
  62.             ++currentPage;
  63.         }
  64.  
  65.         return this.items();
  66.     }
  67.  
  68.     public Iterator<E> previous() {
  69.         if (this.hasPrevious()) {
  70.             --currentPage;
  71.         }
  72.  
  73.         return this.items();
  74.     }
  75. }

Código Java:
Ver original
  1. import java.util.ArrayList;
  2.  
  3. public class PaginableArrayList<E> extends ArrayList<E> implements Paginable<E> {
  4.  
  5.     @Override
  6.     public Paginator<E> paginate(int perPage) {
  7.         return new Paginator<>(perPage, this);
  8.     }
  9. }

Código Java:
Ver original
  1. PaginableArrayList<Integer> instance = new PaginableArrayList<>();
  2.  
  3.         instance.addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
  4.         Paginator<Integer> paginator = instance.paginate(4);
  5.  
  6.         while (paginator.hasNext()) {
  7.             Iterator<Integer> items = paginator.next();
  8.  
  9.             System.out.println("Page: " + paginator.currentPage());
  10.  
  11.             while (items.hasNext()) {
  12.                 System.out.println(items.next());
  13.             }
  14.             System.out.println();
  15.         }