2012-09-06 14 views
8

Ho incontrato un problema che non ho avuto a che fare prima. Sto scrivendo una patch per un database in Java che fondamentalmente sta convertendo i dati memorizzati in alcune righe. Per fare questo ho una tabella di conversione che mi dice quali valori diventano cosa.Compilazione di una hashmap con valori predefiniti (java)

Esempio, se leggo in "RC", "AC", "GH" -> Aggiorna il valore su "T1". (Questi sono solo esempi casuali, in pratica si sta convertendo una stringa in un'altra.)

Ho bisogno di un buon modo di memorizzare queste conversioni. Stavo pensando ad una hashmap: KEY, VALUE: (RC, T1) (AC, T1) (GH, T1) e così via e così via.

Ora ce ne sono dozzine e dozzine. Qual è un modo pulito per popolare questa hashmap quando la patch viene inizializzata?

risposta

18

vorrei fare l'inizializzazione durante l'impostazione della HashMap

Per esempio

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

Poi si wuld assicurarsi che tutto sia impostato insieme nel codice.

Penso che @Nambari sia un buon punto anche se forse ha il valore come una lista piuttosto che una stringa. Questo però scambia le tue chiavi e valori.

esempio

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

Grazie! Questo è un po 'quello che stavo pensando (il tuo primo esempio). Speravo che potesse esserci un modo davvero ordinato di farlo, ma credo che dovrò mettermi a letto. RNJ molto apprezzato per la conferma. – user1652875

+0

@ user1652875 Penso che sia leggermente più ordinato con l'inizializzazione nello stesso posto della dichiarazione. Allora sai per certo che la mappa contiene alcuni dati. – RNJ

0

Può essere un altro modo, l'elenco RC,AC,GH come valore e T1 come chiave per hashmap, in questo modo è possibile ridurre il numero di voci nella mappa.

+0

Ma, la complessità di una ricerca in tale struttura non sarà nulla di buono - come vi cercare tale mappa, allora, dire quando alzando lo sguardo di un sostituto per "RC"? –

+0

Sono d'accordo, questo è un approccio semplice se si hanno meno chiavi (come T1, T2 ecc.). Se meno chiavi puoi ottenere entrySet() e giocarci. Se il numero di chiavi è elevato, il tempo di ricerca sarebbe elevato. Ancora una volta, è il trade-off, la semplicità in un posto crea complessità sull'altro. – kosa

0

È possibile utilizzare PropertiesConfiguration da Commons apache.

il valore può contenere delimitatori di valore e verrà quindi interpretato come un elenco di token. Il delimitatore del valore predefinito è la virgola ",". Così seguente definizione

key = This property, has multiple, values 
Problemi correlati