2010-11-07 25 views
5

Mi objetivo es crear un mapa de mapas para que pueda recuperar información del mapa exterior por su clave y luego acceder a sus mapas "internos" por sus claves.Mapa de mapas: ¿cómo mantener los mapas interiores como mapas?

Sin embargo, cuando obtuve cada mapa interior, el mapa que creé originalmente se convirtió en un Objeto y no puedo usar la clave para acceder a su valor como lo hago con el mapa exterior.

Para aprender de sus expertos, me gustaría saber cómo mantener todos los mapas como mapas. O, ¿es posible?

aquí es mi programa de ejercicios:

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 

public class MapExample { 

    public static void main(String[] args) { 

     Map<Object,String> mp=new HashMap<Object, String>(); 

     // adding or set elements in Map by put method key and value pair 
     mp.put(new Integer(2), "Two"); 
     mp.put(new Integer(1), "One"); 
     mp.put(new Integer(3), "Three"); 
     mp.put(new Integer(4), "Four"); 

     Map<Object,String> mp2=new HashMap<Object, String>(); 
     mp2.put(new Integer(2), "Two2"); 
     mp2.put(new Integer(1), "One2"); 
     mp2.put(new Integer(3), "Three2"); 
     mp2.put(new Integer(4), "Four2"); 

     Map<Object,String> mpMaps=new HashMap(); 

     mpMaps.put("Map1",mp); 
     mpMaps.put("Map2",mp2); 

     System.out.println("This is a map of Maps: " + mpMaps); 

     for (int i=0;i<mpMaps.size();i++){ 
        ArrayList a = new ArrayList(mpMaps.keySet()); 
        Object o=a.get(i); 
        System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o)); 
     }    
    } 
} 

SOLUCIONES:

Map<Object,Map<Object,String> 
    Map<String, Object> mpMaps=new HashMap<String, Object>(); 

por Ameer y sleske

+2

Piensa que otra posible solución para tu propósito es tener un solo hashmap que tenga como claves pares de valores. Esto reduciría la complejidad de todo (también porque con la sintaxis de los genéricos reales es bastante doloroso). – Jack

+0

sí, eso es bueno! ¡gracias! Mi necesidad proviene de un proyecto que primero necesito ordenar una lista de mapas, luego recupero los valores de cada mapa para su uso posterior. – john

Respuesta

7

Aquí está el código actualizado que parece funcionar, debe escribir el mapa de mapas como <String, Object> ya que mp no es una cadena que no puede hacer <Object, String>.

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
import java.util.ArrayList; 

public class MapExample { 

    public static void main(String[] args) { 

     Map<Object,String> mp=new HashMap<Object, String>(); 

     // adding or set elements in Map by put method key and value pair 
     mp.put(new Integer(2), "Two"); 
     mp.put(new Integer(1), "One"); 
     mp.put(new Integer(3), "Three"); 
     mp.put(new Integer(4), "Four"); 

     Map<Object,String> mp2=new HashMap<Object, String>(); 
     mp2.put(new Integer(2), "Two2"); 
     mp2.put(new Integer(1), "One2"); 
     mp2.put(new Integer(3), "Three2"); 
     mp2.put(new Integer(4), "Four2"); 

     Map<String, Object> mpMaps=new HashMap<String, Object>(); 

     mpMaps.put("Map1",mp); 
     mpMaps.put("Map2",mp2); 

     System.out.println("This is a map of Maps: " + mpMaps); 

     for (int i=0;i<mpMaps.size();i++){ 
        ArrayList<Object> a = new ArrayList<Object>(mpMaps.keySet()); 
        Object o=a.get(i); 
        System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o)); 
     }    
    } 
} 
+0

gracias por volver a trabajar mi código !!! – john

5

Su código no compila.

Uno de los problemas es la siguiente:

Map<Object,String> mpMaps=new HashMap(); 
mpMaps.put("Map1",mp); 

Esto no funcionará, y cuando se pone un mapa (mp) en un mapa cuyos valores tienen que ser Strings.

Use Map<Object,Map<Object,String> y usted debe estar bien.

+0

redefiniendo el mapa, ¿debería obtener un mapa con Map m = mpMaps.get (clave)? Lo intenté, pero todavía no puedo hacer que funcione ... – john

+0

Sí, deberías. Si no funciona, edite su pregunta para agregar el nuevo código y explique exactamente lo que no funciona. – sleske

+0

¡Excelente! ¡Lo tengo trabajando! Ahora, realmente entiende lo serio que es Java.Algunas veces, obtuve código trabajando en Groovy, pero cuando lo probé en Java, falló. Falló porque no proporcioné suficientes detalles de los tipos. ¡GRACIAS! – john

0

Map mpMaps = new HashMap();

mpMaps.put ("Map1", mp);

obtendrá una excepción con esta afirmación: mp tiene el tipo Mapa, pero lo está tratando como una Cadena.

Si entendí bien tu pregunta, necesitarás una referencia al objeto utilizado como clave o tendrás que escribir tu clave/valores.

-3

Example

Este es un ejemplo en la creación de un mapa de mapas.

+0

Esto realmente sería más útil si fuera texto y no una imagen de texto ... – WillardSolutions