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

[SOLUCIONADO] paginando Map´s

Estas en el tema de paginando Map´s en el foro de Java en Foros del Web. Hola a todos, mi consulta es la sgte: tengo una clase public class Estadio { private int numero; private String nombre; private int capacidad; private ...
  #1 (permalink)  
Antiguo 16/09/2013, 13:00
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
paginando Map´s

Hola a todos, mi consulta es la sgte: tengo una clase

public class Estadio
{
private int numero;
private String nombre;
private int capacidad;
private int posicion; // variable para la posicion donde esta la fila
private int posXfiltro; // variable temporal para hacer los filtros
public static int autoID=0;
public int getNumero(){
return numero;
}
public String getNombre(){
return nombre;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public int getCapacidad(){
return capacidad;
}
public void setCapacidad(int capacidad){
this.capacidad = capacidad;
}
public int getPosicion() {
return posicion;
}
public void setPosicion(int posicion){
this.posicion = posicion;
}
public int getPosXfiltro() {
return posXfiltro;
}
public void setPosXfiltro(int posXfiltro) {
this.posXfiltro = posXfiltro;
}
public Estadio(int numero, String nombre, int capacidad){
this.numero = numero;
this.nombre = nombre.toUpperCase();
this.capacidad = capacidad;
}
@Override
public boolean equals(Object obj){
if(obj instanceof Estadio)
{
Estadio objestadio=(Estadio)obj;
return objestadio.nombre.equals(this.nombre);
}
else
return false;
}

@Override
public String toString() {
return "ESTADIO:" + numero + " NOMBRE:" + nombre + " CAPACIDAD:" + capacidad;
}

public static int obtenerUltimoID(){
return autoID+1;
}
public static void incrementarID(){
autoID++;
}
}

resulta q tengo unos métodos en mi clase gestEstadios q me busca las posiciones pero sólo me sirve para un TreeMap o HashMap único:

public Estadio obtenerElemento(int posicion)
{
Estadio objestadio=null;
for(Estadio obje : colestadios.values())
{
if(obje.getPosicion()==posicion)
{
objestadio=obje;
}
}
return objestadio;
}
public TreeMap<Integer,Estadio>devolverDatosXFiltro(Strin g criterio)
{
TreeMap<Integer,Estadio>aux =new TreeMap();
int posTemp=0;
for(Estadio obje : colestadios.values())
{
if(obje.getNombre().substring(0, criterio.length()).equalsIgnoreCase(criterio))
{
obje.setPosXfiltro(posTemp);
aux.put(obje.getNumero(), obje);
posTemp++;
}
else
{
obje.setPosXfiltro(-1);
}
}
return aux;
}
public Estadio obtenerElementoXFiltro(int posicion)
{
Estadio objestadio=null;
for(Estadio obje : colestadios.values())
{
if(obje.getPosXfiltro()==posicion && obje.getPosXfiltro()!=-1)
{
objestadio=obje;
}
}
return objestadio;
}

aqui hago en la parte gráfica el listado:

private void cargarEstadios()
{
objpe.setPaginableListener(new IPaginador() {
@Override
public void onPage(Paginador paginable, int page) {
objte.setModelo((DefaultTableModel)objte.getModelo ());
objte.getModelo().setRowCount(0);
for (int i = paginable.from(); i < paginable.to(); i++)
{
if(GestEstadios.getInstance().devolverDatos().size ()>i)
{
Estadio obje=GestEstadios.getInstance().obtenerElemento(i) ;
Object[]row={obje.getNumero(),obje.getNombre(),obje.getCap acidad()};
objte.getModelo().addRow(row);
continue;
}
break;
}
}
});
objpe.setPage(1);
}

el problema es q si quiero por ejemplo hacer en una clase pais poner los estadios de ese país no puedo paginarlos de la misma manera, no sé cómo replantear mi forma de paginar para los maps xq para las listas me funciona muy bien.
  #2 (permalink)  
Antiguo 07/01/2016, 20:05
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: paginando Map´s

me respondo a mí mismo, pues me creé una estructura de datos experimental para paginar con maps:

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

por si a alguien le sirve el código, total esta es la versión experimental. Saludos

Etiquetas: clase, 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 19:01.