Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/01/2016, 20:05
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 8 meses
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