Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Estuctura para paginar

Estas en el tema de Estuctura para paginar en el foro de Java en Foros del Web. Hola a todos, acá tengo una consulta es sobre paginación de registros: la cuestión es que quiero crear una estructura de datos para paginar los ...
  #1 (permalink)  
Antiguo 05/12/2013, 20:44
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Estuctura para paginar

Hola a todos, acá tengo una consulta es sobre paginación de registros:

la cuestión es que quiero crear una estructura de datos para paginar los datos de otra estructura de datos ya sea una lista o mapa en fin, a esas las convierto en array hasta ahí va bien pero al momento de iniciar las páginas me da este error:

Exception in thread "main" java.lang.NullPointerException
at paginacionnivel2.Cuerpo.main(Cuerpo.java:7)
Java Result: 1

aquí pongo mi código:

package paginacionnivel2;
import java.util.TreeMap;
public class TreePages<E>
{
private final TreeMap<Integer,E[]>colPaginas=new TreeMap();
private final int numPagActual;
private final E[]arreglo;
private int cantXPag;
public void setCantPaginas(int xcantXPag) {
this.cantXPag = xcantXPag;
}
public TreePages(E[] xarreglo, int xcantXPag) {
this.arreglo = xarreglo;
this.cantXPag = xcantXPag;
this.numPagActual=1;
this.iniciarPaginas();
}

public E[] next(){
E[]pagina=null;
if (colPaginas.lastKey() > numPagActual)
{
pagina=colPaginas.get(numPagActual+1);
}
return pagina;
}
public E[] previous() {
E[]pagina=null;
if (colPaginas.firstKey() < numPagActual)
{
pagina=colPaginas.get(numPagActual-1);
}
return pagina;
}
public E[] first(){
E[]pagina=null;
if (colPaginas.firstKey() != numPagActual)
{
pagina=colPaginas.get(colPaginas.firstKey());
}
return pagina;
}
public E[] last(){
E[]pagina=null;
if (colPaginas.lastKey() != numPagActual)
{
pagina=colPaginas.get(colPaginas.lastKey());
}
return pagina;
}
private void iniciarPaginas()
{
int cont=1;
int cantPAG=arreglo.length/cantXPag;
for(E objeto : arreglo)
if(cantPAG!=cont)
{
E[] temporal=(E[])new Object[cantXPag];
for(int i=0;i<cantXPag;i++)
temporal[i]=objeto;
colPaginas.put(cont, temporal);
cont++;
}
}

}

el problema esta en el método iniciarPaginas cuando empieza el for pero de ahí en adelante no se me ocurre nada de cómo resolverlo.

tengo cómo paginar mis datos pero quiero crear esta estructura de datos para q no ponga el largo del array cómo parámetro para obtener la última pagina.

aquí dejo el resto del código:

package paginacionnivel2;
import java.util.LinkedList;
public class ContrRatas
{
private static ContrRatas objgestor=null;
private LinkedList<Ratas>colratas=null;
public static ContrRatas getInstance()
{
if(objgestor==null)
{
objgestor=new ContrRatas();
}
return objgestor;
}
private ContrRatas()
{
colratas=new LinkedList();
Ratas objr1=new Ratas(1,"hjjh");
colratas.add(objr1);
Ratas objr2=new Ratas(2,"vcvc");
colratas.add(objr2);
Ratas objr3=new Ratas(3,"bvbv");
colratas.add(objr3);
Ratas objr4=new Ratas(4,"vcvc");
colratas.add(objr4);
Ratas objr5=new Ratas(5,"jhhj");
colratas.add(objr5);
Ratas objr6=new Ratas(6,"fdfd");
colratas.add(objr6);
Ratas objr7=new Ratas(7,"bhbh");
colratas.add(objr7);
Ratas objr8=new Ratas(8,"rddr");
colratas.add(objr8);
Ratas objr9=new Ratas(9,"aqqa");
colratas.add(objr9);
Ratas objr10=new Ratas(10,"kjjk");
colratas.add(objr10);
Ratas objr11=new Ratas(11,"fdfd");
colratas.add(objr11);
Ratas objr12=new Ratas(12,"gfgf");
colratas.add(objr12);
Ratas objr13=new Ratas(13,"vcvc");
colratas.add(objr13);
Ratas objr14=new Ratas(14,"lkkl");
colratas.add(objr14);
Ratas objr15=new Ratas(15,"jhjh");
colratas.add(objr15);
Ratas objr16=new Ratas(16,"vcvc");
colratas.add(objr16);
Ratas objr17=new Ratas(17,"gfgf");
colratas.add(objr17);
Ratas objr18=new Ratas(18,"hghghg");
colratas.add(objr18);
Ratas objr19=new Ratas(19,"gffg");
colratas.add(objr19);
Ratas objr20=new Ratas(20,"rrffr");
colratas.add(objr20);
}
private Ratas[] devolverArray()
{
Ratas[]aux=new Ratas[colratas.size()];
int cont=0;
for(Ratas objr : colratas)
{
aux[cont]=objr;
cont++;
}
return aux;
}
public TreePages<Ratas>devolverPaginas()
{
TreePages<Ratas>paginas=new TreePages(devolverArray(), 5);
return paginas;
}
}

package paginacionnivel2;
public class Ratas
{
private int numero;
private String nombre;
public int getNumero()
{
return numero;
}
public String getNombre()
{
return nombre;
}
public Ratas(int numero, String nombre)
{
this.numero = numero;
this.nombre = nombre;
}
@Override
public String toString()
{
return "RATA:"+ numero + "NOMBRE" + nombre;
}
}

package paginacionnivel2;
public class Cuerpo
{
public static void main(String[] args)
{
Ratas[]aux=ContrRatas.getInstance().devolverPaginas().fir st();
for(Ratas objr : aux)
{
if(objr!=null)
{
System.out.println(objr);
}
}
}
}

necesito ayuda, si me pueden ayudar se los agradezco.
  #2 (permalink)  
Antiguo 08/12/2013, 20:14
 
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.         }
  #3 (permalink)  
Antiguo 09/12/2013, 13:27
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estuctura para paginar

hola LuisChavezB, gracias x responder te tengo buenas noticias: los métodos first, previous, next y last andan bien:

<code>
package paginacionnivel2;
import java.util.*;
public class TreePages<T>
{
private final TreeMap<Integer,T[]>colPaginas=new TreeMap();
private final int cantpaginas;
private final T[]arreglo;
private int nropagina;
private T[]pagina;
public TreePages(T[] xarreglo, int xcantpaginas) {
this.arreglo = xarreglo;
this.cantpaginas = xcantpaginas;
this.nropagina=1;
this.iniciarPaginas();
}
public T[] next(){
if(colPaginas.lastKey()==nropagina)
pagina=last();
else
{
nropagina++;
pagina=colPaginas.get(nropagina);
}
return pagina;
}
public T[] previous() {
if(colPaginas.firstKey()==nropagina)
pagina=first();
else
{
nropagina--;
pagina=colPaginas.get(nropagina);
}
return pagina;
}
public T[] first(){
if(nropagina!=colPaginas.firstKey())
{
nropagina=colPaginas.firstKey();
pagina=colPaginas.get(colPaginas.firstKey());
}
else
{
nropagina=colPaginas.firstKey();
pagina=colPaginas.get(colPaginas.firstKey());
}
return pagina;
}
public T[] last(){
if(nropagina!=colPaginas.lastKey())
{
nropagina=colPaginas.lastKey();
pagina=colPaginas.get(colPaginas.lastKey());
}
else
{
nropagina=colPaginas.lastKey();
colPaginas.get(nropagina);
}
return pagina;
}
private void iniciarPaginas()
{
int cont=1;
int totpaginas=arreglo.length/cantpaginas;
int lower = 0;
int upper = 0;
for(int i=0; i<totpaginas; i++){
upper+=totpaginas;
colPaginas.put(cont,Arrays.copyOfRange(arreglo, lower, upper));
lower = upper;
cont++;
}
if(upper < arreglo.length-1){
lower = upper;
upper = arreglo.length;
colPaginas.put(cont,Arrays.copyOfRange(arreglo, lower, upper));
cont++;
}
}

}
</code>

pero me queda un error en el método iniciarpaginas y es q en la cantidad de registros x pagina pongo 5 y me hace 5 páginas de 4 filas:

<code>
package paginacionnivel2;
import java.util.LinkedList;
public class ContrRatas
{
private static ContrRatas objgestor=null;
private LinkedList<Ratas>colratas=null;
TreePages<Ratas>paginas=null;
public static ContrRatas getInstance()
{
if(objgestor==null)
{
objgestor=new ContrRatas();
}
return objgestor;
}
private ContrRatas()
{
colratas=new LinkedList();
Ratas objr1=new Ratas(1,"hjjh");
colratas.add(objr1);
Ratas objr2=new Ratas(2,"vcvc");
colratas.add(objr2);
Ratas objr3=new Ratas(3,"bvbv");
colratas.add(objr3);
Ratas objr4=new Ratas(4,"vcvc");
colratas.add(objr4);
Ratas objr5=new Ratas(5,"jhhj");
colratas.add(objr5);
Ratas objr6=new Ratas(6,"fdfd");
colratas.add(objr6);
Ratas objr7=new Ratas(7,"bhbh");
colratas.add(objr7);
Ratas objr8=new Ratas(8,"rddr");
colratas.add(objr8);
Ratas objr9=new Ratas(9,"aqqa");
colratas.add(objr9);
Ratas objr10=new Ratas(10,"kjjk");
colratas.add(objr10);
Ratas objr11=new Ratas(11,"fdfd");
colratas.add(objr11);
Ratas objr12=new Ratas(12,"gfgf");
colratas.add(objr12);
Ratas objr13=new Ratas(13,"vcvc");
colratas.add(objr13);
Ratas objr14=new Ratas(14,"lkkl");
colratas.add(objr14);
Ratas objr15=new Ratas(15,"jhjh");
colratas.add(objr15);
Ratas objr16=new Ratas(16,"vcvc");
colratas.add(objr16);
Ratas objr17=new Ratas(17,"gfgf");
colratas.add(objr17);
Ratas objr18=new Ratas(18,"hghghg");
colratas.add(objr18);
Ratas objr19=new Ratas(19,"gffg");
colratas.add(objr19);
Ratas objr20=new Ratas(20,"rrffr");
colratas.add(objr20);
Ratas[]aux=colratas.toArray(new Ratas[colratas.size()]);
paginas=new TreePages(aux, 5);
}
public Ratas[] devolverArray()
{
return colratas.toArray(new Ratas[colratas.size()]);
}
public TreePages<Ratas>devolverPaginas()
{
return paginas;
}
/*
public LinkedList<Ratas>devolverDatosXNombre(String criterio)
{
LinkedList<Ratas>aux =new LinkedList();
for(Ratas objr : colratas)
{
if(objr.getNombre().startsWith(criterio.toUpperCas e())){
aux.add(objr);
}
if(objr.getNombre().startsWith(criterio.toLowerCas e())){
aux.add(objr);
}
}
return aux;
}*/

}
</code>

<code>
package paginacionnivel2;
public class Ratas
{
private int numero;
private String nombre;
public int getNumero()
{
return numero;
}
public String getNombre()
{
return nombre;
}
public Ratas(int numero, String nombre)
{
this.numero = numero;
this.nombre = nombre;
}
@Override
public String toString()
{
return "RATA:"+ numero + " NOMBRE: " + nombre;
}
}
</code>

acá esta el cuerpo del programa:

<code>
package paginacionnivel2;
import java.util.Scanner;
public class Cuerpo
{
private static void MenuPrincipal()
{
Ratas[]aux=null;
Scanner sc=new Scanner(System.in);
System.out.println("");
System.out.println("Menú Principal de la TreePages:");
System.out.println("");
System.out.println("Seleccione su Opción: ");
System.out.println("");
System.out.println("Primero: 1");
System.out.println("Anterior: 2");
System.out.println("Siguiente: 3");
System.out.println("Último: 4");
System.out.println("Salir: 5");
int opcion=sc.nextInt();
if(opcion==1)
{
aux=ContrRatas.getInstance().devolverPaginas().fir st();
listarPagina(aux);
}
else if(opcion==2)
{
aux=ContrRatas.getInstance().devolverPaginas().pre vious();
listarPagina(aux);
}
else if(opcion==3)
{
aux=ContrRatas.getInstance().devolverPaginas().nex t();
listarPagina(aux);
}
else if(opcion==4)
{
aux=ContrRatas.getInstance().devolverPaginas().las t();
listarPagina(aux);
}
else if(opcion==5)
{
System.exit(0);
}
else
{
System.out.println("");
System.out.println("Error. Ingrese una de las opciones que aparece en el sistema");
}
MenuPrincipal();
}
private static void listarPagina(Ratas[]aux)
{
for(Ratas objr : aux)
{
if(objr!=null)
{
System.out.println(objr);
}
}
}
public static void main(String[] args)
{
MenuPrincipal();
}
}
</code>

sólo queda solucionar que cuando pongo en el constructor de la clase ContrRatas y pongo 5 cómo parámetro a la variable paginas, tendría q hacer 4 páginas de 5 filas y no 5 páginas de 4 filas.
si me ayudan se los agradezco.

Última edición por detective_jd; 09/12/2013 a las 13:36
  #4 (permalink)  
Antiguo 09/12/2013, 13:47
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estuctura para paginar

el error era este:

upper+=totpaginas;

lo solucioné:

upper+=cantpaginas;

ahora anda todo bien

la pregunta ahora sería: ¿le agrego los métodos esta vacio, tamaño y limpiar para que quede cómo una estructura de datos?

¿siendo así tendría q hacerlos cómo cualquier estructura de datos o cambia xq ahora es por página clave(nro de página) y valor(el array de la página)?
  #5 (permalink)  
Antiguo 21/12/2013, 17:48
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estuctura para paginar

hola, aqui estoy nuevamente solucioné algunos problemas y agregue funcionalidades nuevas, pero tengo ahora el sgte problema q no puedo resolver:

Rata --- Nombre
1 --- Pepe
2 --- Luis
3 --- Juan
4 --- Maria
5 --- Pedro
Página 2
6 --- Peres
7 --- Rodrigo
8 --- Mariana
Elimino Luis y debería quedarme así:
1 --- Pepe
3 --- Juan
4 --- Maria
5 --- Pedro
6 --- Peres
Página 2
7--- Rodrigo
8--- Mariana
Y no se me ocurre nada para que me quede tal cual..

aqui esta el código:

http://pastebin.com/Udh7Ct8d

por favor necesito con esto!, si me ayuden se los agradezco.
  #6 (permalink)  
Antiguo 07/01/2016, 21:03
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estuctura para paginar

Hola a todos, me respondo a mi mismo y pongo las versiones experimentales de mis estructuras de datos para paginar:

PagesList (actualmente está en su versión 2.8)

Código Java:
Ver original
  1. /*
  2.  * @author Nelson Eustaquio
  3.  * @author Juan Diego Ocampo
  4.  * @param <E>
  5.  */
  6. public class PagesList<E> implements java.util.RandomAccess, java.io.Serializable {
  7.     public enum Navegate {
  8.         goToFirst,
  9.         goToPrevious,
  10.         goToNext,
  11.         goToLast,
  12.         goToPresent
  13.     }
  14.     private final java.util.ArrayList<java.util.ArrayList<E>>paginas=new java.util.ArrayList();
  15.     private final int limite;
  16.     private int pagina;
  17.     private int tamanio;
  18.     private int ultima;
  19.     private int filas;
  20.     public PagesList() {
  21.         this.limite = 12;
  22.         this.clear();
  23.     }
  24.     public PagesList(int xlimite) {
  25.         this.limite = xlimite;
  26.         this.clear();
  27.     }
  28.     private java.util.ArrayList<E> getNext() {
  29.         return (pagina == ultima) ? getLast() : paginas.get(++pagina);
  30.     }
  31.     private java.util.ArrayList<E> getPrevious() {
  32.         return (pagina == 0) ? getFirst() : paginas.get(--pagina);
  33.     }
  34.     private java.util.ArrayList<E> getFirst() {
  35.         return (pagina != 0) ? paginas.get((pagina = 0)) : paginas.get((pagina = 0));
  36.     }
  37.     private java.util.ArrayList<E> getLast() {
  38.         return (pagina != ultima) ? paginas.get((pagina = ultima)) : paginas.get((pagina = ultima));
  39.     }
  40.     private java.util.ArrayList<E> getActually() {
  41.         return paginas.get(pagina);
  42.     }
  43.     public java.util.ArrayList<E> getReloadPage(Navegate opcion) {
  44.         switch (opcion) {
  45.             case goToFirst:
  46.                 getFirst();
  47.                 break;
  48.             case goToPrevious:
  49.                 getPrevious();
  50.                 break;
  51.             case goToNext:
  52.                 getNext();
  53.                 break;
  54.             case goToLast:
  55.                 getLast();
  56.                 break;
  57.         }
  58.         return getActually();
  59.     }
  60.     public synchronized void add(E objeto) throws Exception {
  61.         if (objeto == null) {
  62.             throw new Exception("elemento nulo");
  63.         }
  64.         else if (limite == filas) {
  65.             filas = 0;
  66.             java.util.ArrayList<E> t = new java.util.ArrayList(limite);
  67.             paginas.add(t);
  68.             ultima++;
  69.             paginas.get(ultima).add(objeto);
  70.             tamanio++;
  71.             filas++;
  72.         } else {
  73.             paginas.get(ultima).add(objeto);
  74.             filas++;
  75.         }
  76.     }
  77.     public E get(int posicion) {
  78.         return getActually().get(posicion);
  79.     }
  80.     public final void clear() {
  81.         paginas.clear();
  82.         this.pagina = 0;
  83.         this.filas = 0;
  84.         this.ultima=0;
  85.         java.util.ArrayList t = new java.util.ArrayList(limite);
  86.         paginas.add(t);
  87.         this.tamanio = 1;
  88.     }
  89.     public boolean contains(Object objeto) {
  90.         return this.indexOf(objeto) >= 0;
  91.     }
  92.     private int indexOf(Object objeto) {
  93.         java.util.ArrayList<E> arreglo = this.toList();
  94.         if (objeto == null) {
  95.             for (int i = 0; i < arreglo.size(); i++) {
  96.                 if (arreglo.get(i) == null) {
  97.                     return i;
  98.                 }
  99.             }
  100.         } else {
  101.             for (int i = 0; i < arreglo.size(); i++) {
  102.                 if (objeto.equals(arreglo.get(i))) {
  103.                     return i;
  104.                 }
  105.             }
  106.         }
  107.         return -1;
  108.     }
  109.     public synchronized void remove(E objeto) {
  110.         this.getActually().remove(objeto);
  111.         java.util.ArrayList<E> arreglo = this.toList();
  112.         this.clear();
  113.         for (E obj : arreglo) {
  114.             try {
  115.                 this.add(obj);
  116.             } catch (Exception ex) {
  117.                 System.out.println(ex.getMessage());
  118.             }
  119.         }
  120.     }
  121.     public synchronized java.util.ArrayList<E> toList() {
  122.         java.util.ArrayList<E> aux = new java.util.ArrayList();
  123.         for (java.util.ArrayList<E> list : paginas) {
  124.             for (E row : list) {
  125.                 aux.add(row);
  126.             }
  127.         }
  128.         return aux;
  129.     }
  130.     public int size() {
  131.         return tamanio;
  132.     }
  133.     public boolean isEmpty(){
  134.         return getFirst().isEmpty();
  135.     }
  136.     public void sort() {
  137.         this.sort(null);
  138.     }
  139.     public synchronized void sort(java.util.Comparator comp) {
  140.         java.util.ArrayList<E> arreglo = this.toList();
  141.         java.util.Collections.sort(arreglo, comp);
  142.         this.clear();
  143.         for (E obj : arreglo) {
  144.             try {
  145.                 this.add(obj);
  146.             } catch (Exception ex) {
  147.                 System.out.println("Error al ordenar elementos" + ex.getMessage());
  148.             }
  149.         }
  150.     }
  151.     public PagesList<E> copyTo() {
  152.         PagesList<E> copia = new PagesList(limite);
  153.         for (java.util.ArrayList<E> arreglo : paginas) {
  154.             for (E obj : arreglo) {
  155.                 try {
  156.                     copia.add(obj);
  157.                 } catch (Exception ex) {
  158.                     System.out.println(ex.getMessage());
  159.                 }
  160.             }
  161.         }
  162.         return copia;
  163.     }
  164. }
  #7 (permalink)  
Antiguo 07/01/2016, 21:06
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estuctura para paginar

PagesMap (se encuentra en su versión 1.0)

Código Java:
Ver original
  1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. import java.util.LinkedHashMap;
  4. import java.util.TreeMap;
  5. public class PagesMap<K,V>
  6. {
  7.     public enum Navegate {
  8.         goToFirst,
  9.         goToPrevious,
  10.         goToNext,
  11.         goToLast,
  12.         goToPresent
  13.     }
  14.     private final ArrayList<LinkedHashMap<K,V>>pages = new ArrayList();
  15.     private final int limit;
  16.     private int filas;
  17.     private int latest;
  18.     private int size;
  19.     private int page;
  20.     public PagesMap() {
  21.         this.limit = 10;
  22.         this.clear();
  23.     }
  24.     public PagesMap(int xlimit) {
  25.         this.limit = xlimit;
  26.         this.clear();
  27.     }    
  28.     private LinkedHashMap<K,V> getNext() {
  29.         return (page == latest) ? getLast() : pages.get(++page);
  30.     }
  31.     private LinkedHashMap<K,V> getPrevious() {
  32.         return (page == 0) ? getFirst() : pages.get(--page);
  33.     }
  34.     private LinkedHashMap<K,V> getFirst() {
  35.         return (page != 0) ? pages.get((page = 0)) : pages.get((page = 0));
  36.     }
  37.     private LinkedHashMap<K,V> getLast() {
  38.         return (page != latest) ? pages.get((page = latest)) : pages.get((page = latest));
  39.     }
  40.     private LinkedHashMap<K,V> getPresent() {
  41.         return pages.get(page);
  42.     }
  43.     public LinkedHashMap<K,V> getReload(Navegate opcion) {
  44.         switch (opcion) {
  45.             case goToFirst:
  46.                 getFirst();
  47.                 break;
  48.             case goToPrevious:
  49.                 getPrevious();
  50.                 break;
  51.             case goToNext:
  52.                 getNext();
  53.                 break;
  54.             case goToLast:
  55.                 getLast();
  56.                 break;
  57.         }
  58.         return getPresent();
  59.     }
  60.     public final void clear() {
  61.         pages.clear();
  62.         this.page = 0;
  63.         this.filas = 0;
  64.         this.latest = 0;
  65.         LinkedHashMap<K,V> t = new LinkedHashMap();
  66.         pages.add(t);
  67.         this.size = 1;
  68.     }
  69.     public V put(K key,V value) {
  70.         if (key == null) {
  71.             throw new NullPointerException("elemento nulo");
  72.         }
  73.         else if (limit == filas) {
  74.                 filas = 0;
  75.                 LinkedHashMap<K,V> t = new LinkedHashMap();
  76.                 pages.add(t);
  77.                 latest++;                
  78.                 pages.get(latest).put(key, value);
  79.                 size++;
  80.                 filas++;
  81.             }
  82.         else{
  83.             pages.get(latest).put(key, value);
  84.             filas++;
  85.         }      
  86.         return value;
  87.     }    
  88.     public V get(K key){
  89.         for(LinkedHashMap<K,V> p : pages){
  90.             if(p.get(key) != null){
  91.                 return p.get(key);
  92.             }
  93.         }
  94.         return null;
  95.     }
  96.     public boolean containsKey(K key){
  97.         for(LinkedHashMap<K,V> p : pages){
  98.             if(p.containsKey(key)){
  99.                 return p.containsKey(key);
  100.             }            
  101.         }
  102.         return false;
  103.     }
  104.     public boolean containsValue(V value){
  105.         for(LinkedHashMap<K,V> p : pages){
  106.             if(p.containsValue(value)){
  107.                 return p.containsValue(value);  
  108.             }          
  109.         }
  110.         return false;
  111.     }
  112.     public V remove(K key) {
  113.         LinkedHashMap<K,V> aux = this.toMap();
  114.         V res = aux.get(key);
  115.         aux.remove(key);
  116.         this.clear();
  117.         aux.entrySet().stream().forEach((e) -> {
  118.             this.put(e.getKey(),e.getValue());
  119.         });
  120.         return res;
  121.     }
  122.     public LinkedHashMap<K,V> toMap() {
  123.         LinkedHashMap<K,V> aux = new LinkedHashMap();
  124.         pages.stream().forEach((list) -> {
  125.             list.entrySet().stream().forEach((row) -> {
  126.                 aux.put(row.getKey(),row.getValue());
  127.             });
  128.         });
  129.         return aux;
  130.     }
  131.     public void sort(){
  132.         this.sort(null);
  133.     }
  134.     public void sort(Comparator comp){
  135.         TreeMap<K, V> map = new TreeMap(comp);
  136.         this.toMap().entrySet().stream().forEach((e) -> {
  137.             map.put(e.getKey(), e.getValue());
  138.         });
  139.         this.clear();
  140.         map.entrySet().stream().forEach((e) -> {
  141.             this.put(e.getKey(), e.getValue());
  142.         });        
  143.     }
  144.     public PagesMap<K,V>copyTo(){
  145.         PagesMap<K,V> aux= new PagesMap(limit);
  146.         this.toMap().entrySet().stream().forEach((e) -> {
  147.                 aux.put(e.getKey(), e.getValue());            
  148.         });
  149.         return aux;
  150.     }
  151.     public boolean isEmpty(){
  152.         return size == 0;
  153.     }
  154.     public int size() {
  155.         return size;
  156.     }        
  157. }

PagesSet (se encuentra en su versión 1.0)

Código Java:
Ver original
  1. import app.contr.util.PagesMap.Navegate;
  2. import java.util.Comparator;
  3. import java.util.Set;
  4. import java.util.TreeSet;
  5. public class PagesSet<E>
  6. {
  7.     private int limit_copy;
  8.     private final Object PRESENT = new Object();
  9.     private PagesMap<E,Object> map=new PagesMap();
  10.     public PagesSet() {
  11.         map=new PagesMap();
  12.     }
  13.     public PagesSet(int xlimit) {
  14.         limit_copy = xlimit;
  15.         map=new PagesMap(limit_copy);
  16.        
  17.     }  
  18.     public Set<E> getReload(Navegate opcion) {
  19.         return map.getReload(opcion).keySet();
  20.     }
  21.     public int size() {
  22.         return map.size();
  23.     }
  24.     public boolean isEmpty() {
  25.         return map.isEmpty();
  26.     }
  27.     public boolean contains(E obj) {
  28.         return map.containsKey(obj);
  29.     }
  30.     public boolean add(E obj) {
  31.         return map.put(obj, PRESENT) == null;
  32.     }
  33.     public boolean remove(E obj) {
  34.         return map.remove(obj)==PRESENT;
  35.     }
  36.     public Set<E>toSet(){
  37.         return map.toMap().keySet();
  38.     }
  39.     public void sort(){
  40.         this.sort(null);        
  41.     }
  42.     public void sort(Comparator comp){
  43.         TreeSet<E> aux = new TreeSet<>(comp);
  44.         this.toSet().stream().forEach((e) -> {
  45.             aux.add(e);
  46.         });
  47.         this.clear();
  48.         aux.stream().forEach((e) -> {
  49.             this.add(e);
  50.         });
  51.     }
  52.     public PagesSet<E>copyTo(){
  53.         PagesSet<E> aux= new PagesSet(limit_copy);
  54.         this.map.toMap().keySet().stream().forEach((e) -> {
  55.             aux.add(e);
  56.         });
  57.         return aux;
  58.     }
  59.     public void clear() {
  60.         map.clear();
  61.     }
  62. }

Saludos a todos y gracias!

Etiquetas: paginar, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.