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

Problema java: Convertir Map a List

Estas en el tema de Problema java: Convertir Map a List en el foro de Java en Foros del Web. Tengo un objeto que implementa la interfaz Map (en este caso concreto es HashTable), y quiero obtener un objeto List (Vector, ArrayList, etc..) que contenga ...
  #1 (permalink)  
Antiguo 10/08/2006, 11:45
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Problema java: Convertir Map a List

Tengo un objeto que implementa la interfaz Map (en este caso concreto es HashTable), y quiero obtener un objeto List (Vector, ArrayList, etc..) que contenga la lista de Keys del Map.


Según javadoc, el Map proporciona un metodo llamado keySet() que devuelve un Set de las keys que contiene el Map. Pero cuando iteras este Set, cada objeto que contiene no es la key, sino un objeto (key,value).

¿Alguien sabe si es posible hacer esto?

gracias
  #2 (permalink)  
Antiguo 11/08/2006, 00:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
El objeto que te devuelve, teoricamente, los pares key,value es entrySet, comprueba que no estes usando este metodo en vez de keySet.
  #3 (permalink)  
Antiguo 11/08/2006, 01:33
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Los pares (key,value), los devuelve la función values() de Map. Si llamas a la funcion keySet, te devuelve un Collection algo extraño, depurando en WebSphere salen solo las claves, pero si de ese collection sacas el iterador y lo recorres, te devuelve los pares (key,value) y no solo los key.

En JavaDoc indica que si cambias algo de ese collection, también se cambiará en el Map, por lo que supongo que es necesario que devuelva eso. Es extraño, la verdad.

Lo solucione llamando al toArray() del keySet(), devuelve un objeto:

Object[] = {key,key,key,key,key...}

que me soluciona la papeleta de forma menos elegante, pero al menos funciona!


gracias por la ayuda
  #4 (permalink)  
Antiguo 11/08/2006, 03:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
¿Como recorrer el iterador?
  #5 (permalink)  
Antiguo 11/08/2006, 04:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Sería algo de este estilo:

Map map; (supongamos que está definido ya y que tiene datos)

Collection keys = map.keySet();
Iterator itKeys = keys.iterator();
while (itKeys.hasNext()){
Object contenido = itKeys.next(); // Aqui, contenido es (key,value), un Map.Entry
....
....

}

  #6 (permalink)  
Antiguo 11/08/2006, 14:33
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Si lo que quieres es recuperar los keys y guardarlos en un list...

Map mapa = new HashMap();
mapa.put(...
...
...

List lista = new ArrayList(mapa.keySet());
__________________
El último TipdaR
  #7 (permalink)  
Antiguo 12/08/2006, 04:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Pregunta

A mi este código:
Código:
    Map miMapa = new HashMap();
    miMapa.put("1","Uno");
    miMapa.put("2","Dos");
    miMapa.put("3","Tres");
    for(Iterator i = miMapa.keySet().iterator();i.hasNext();)
    {
     Object o = i.next();
     System.err.println("keySet: La clase: " + o.getClass());
    }
    for(Iterator i = miMapa.entrySet().iterator();i.hasNext();)
    {
     Object o = i.next();
     System.err.println("entrySet: La clase: " + o.getClass());
    }
me devuelve:
Cita:
keySet: La clase: class java.lang.String
keySet: La clase: class java.lang.String
keySet: La clase: class java.lang.String
entrySet: La clase: class java.util.HashMap$Entry
entrySet: La clase: class java.util.HashMap$Entry
entrySet: La clase: class java.util.HashMap$Entry
Así que a mi el API me funciona como toca: keySet devuelve un Set con las claves y entrySet devuelve un Set con MapEntry.
  #8 (permalink)  
Antiguo 12/08/2006, 08:23
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Yo uso la versión 1.4, con que versión has hecho la prueba? porque no entiendo cual era el problema, use el keySet(), no entrySet(), y estoy seguro. Pero bueno, como ya lo tengo de la otra forma y creo que van mas rapidos los array[] que los ArrayList por no pasa na

  #9 (permalink)  
Antiguo 04/08/2008, 12:31
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años
Puntos: 1
Respuesta: Problema java: Convertir Map a List

pos con un for(clasekey key : map.keySet){
map.get(key);
}
podes obtener todos los valores del map
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 09:58.