2012-05-16 12 views
5

Vorrei creare unCome inizializzare una public static finale di sola lettura LinkedMap (mappa bidirectionnal)

public static final LinkedMap myMap; 

Da qualche parte ho trovato qualcosa di simile per Maps:

public class Test { 
     private static final Map<Integer, String> MY_MAP = createMap(); 

     private static Map<Integer, String> createMap() { 
      Map<Integer, String> result = new HashMap<Integer, String>(); 
      result.put(1, "one"); 
      result.put(2, "two"); 
      return Collections.unmodifiableMap(result); 
     } 
    } 

Ma non posso applicare il metodo 'unmodifiableMap' lo mostra a LinkedMap. Qualcuno può aiutarmi? È possibile a tutti?

+1

Che cos'è un 'LinkedMap'? –

+1

hai bisogno di metodi specifici per 'LinkedMap'? altrimenti dichiaro semplicemente myMap come 'Map' –

+0

Ho bisogno di una LinkedMap a causa della bidirezionalità (avrei dovuto dire che proviene da commons.apache.org.collections). – July

risposta

10

La soluzione più comune è quasi certamente uno GuavaImmutableMap. (Disclosure:. Contribuisco a Guava)

Map<Integer, String> map = ImmutableMap.of(
    1, "one", 
    2, "two"); 

o

ImmutableMap<Integer, String> map = ImmutableMap 
    .<Integer, String> builder() 
    .put(1, "one") 
    .put(2, "two") 
    .build(); 

Senza altre librerie, l'unica soluzione diversa da quella che hai scritto è

static final Map<Integer, String> CONSTANT_MAP; 
static { 
    Map<Integer, String> tmp = new LinkedHashMap<Integer, String>(); 
    tmp.put(1, "one"); 
    tmp.put(2, "two"); 
    CONSTANT_MAP = Collections.unmodifiableMap(tmp); 
} 
+0

ImmutableMap fornisce bidirezionalità? – July

+0

Se vuoi la bidirezionalità e intendi [ciò che penso intendi] (http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#BiMap) per "bidirezionalità" - quindi ['ImmutableBiMap '] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html) lo farà. –

+0

quindi, se dovessi recuperare la chiave di un certo valore, dovrei prima recuperare l'inverso della mappa, corretto? – July

0

E doesn' Ho senso per me dichiarare una variabile che è uguale alla funzione Create().

Se avete bisogno di una variabile finale myMap dovete scrivere come:

// = createMap(); 
private final static LinkedHashMap<Integer, String> 
              myMap = new LinkedHashMap<Integer, String>(); 
static { 
    myMap.put(1, "one"); 
    myMap.put(2, "Two"); 
}; 

public static void main(String[] args) { 

    for(String link : myMap.values()){ 
    System.out.println("Value in myMap: "+link); 
    } 

} 

o se si desidera utilizzare creare la funzione(), è necessario sbarazzarsi di parola chiave final da myMap e utilizzare myMap in main Mi piace:

public static void main(String[] args) { 

    myMap = Test.createMap(); 
Problemi correlati