2012-09-06 83 views
8

Me encontré con un problema que no había tenido que resolver antes. Estoy escribiendo un parche para una base de datos en Java que básicamente convierte datos almacenados en ciertas filas. Para hacer esto, tengo una tabla de conversión que me dice qué valores se convierten en qué.Rellenar un hashmap con valores predefinidos (java)

Ejemplo, si leo en "RC", "AC", "GH" -> Actualice el valor a "T1". (Estos son solo ejemplos aleatorios, básicamente se trata de convertir una cadena en otra.)

Necesito una buena forma de almacenar estas conversiones. Estaba pensando en un hashmap: CLAVE, VALOR: (RC, T1) (AC, T1) (GH, T1) y así sucesivamente.

Ahora, hay docenas y docenas de estos. ¿Cuál es una buena forma de rellenar este hashmap cuando se inicializa el parche?

Respuesta

18

que haría la inicialización al configurar el HashMap

Por ejemplo

private static final Map<String, String> m = new HashMap<String, String>() {{ 
    put("RC", "T1"); 
    put("AC", "T1"); 
}}; 

Entonces wuld asegurarse de que todo está configurado en conjunto en el código.

Creo que @Nambari hace un buen punto aunque quizás tenga el valor como una lista en lugar de solo una cadena. Sin embargo, esto intercambia sus claves y valores.

por ejemplo

private static final Map<String, List<String>> m = new HashMap<String, List<String>>() {{ 
    put("T1", Arrays.asList("RC", "AC"); 
}}; 
+0

¡Gracias! Eso es lo que estaba pensando (tu primer ejemplo). Esperaba que pudiera haber una forma realmente ordenada de hacerlo, pero supongo que tendré que ponerme sucio. Muy apreciado RNJ por confirmar. – user1652875

+0

@ user1652875 Creo que es un poco más ordenado tener la inicialización en el mismo lugar que la declaración. Entonces, seguro, el mapa contiene algunos datos. – RNJ

0

Puede ser de otra manera, List RC,AC,GH como valor y T1 como clave para hashmap, de esta manera puede reducir el número de entradas en el mapa.

+0

embargo, la complejidad de las operaciones de búsqueda en dicha estructura no será nada bueno - ¿cómo buscar tales mapa a continuación, por ejemplo cuando se esté buscando un reemplazo para "RC"? –

+0

Acepto, este es un enfoque simple si tiene menos teclas (como T1, T2, etc.). Si hay menos teclas, puede obtener entrySet() y jugar con él. Si el número de teclas también es alto, el tiempo de búsqueda sería alto. Nuevamente, es una compensación, la simplicidad en un lugar crea complejidad en el otro extremo. – kosa

0

Puede utilizar PropertiesConfiguration de apache commons.

valor puede contener delimitadores de valores y se interpretará entonces como una lista de tokens. El delimitador de valor predeterminado es la coma ','. Por lo que la definición de la propiedad siguiente

key = This property, has multiple, values 
Cuestiones relacionadas