C'è un modo per inizializzare una HashMap Java in questo modo?
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
Quale sarebbe la sintassi corretta? Non ho trovato nulla riguardo a questo. È possibile? Sto cercando il modo più breve/veloce per mettere alcuni valori "final/static" in una mappa che non cambiano mai e sono conosciuti in anticipo quando si crea la mappa.
Sì, questo è possibile ora. In Java 9 sono stati aggiunti un paio di metodi factory che semplificano la creazione di mappe:
// this works for up to 10 elements:
Map<String, String> test1 = Map.of(
"a", "b",
"c", "d"
);
// this works for any number of elements:
Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
Nell'esempio precedente sia test
che test2
saranno gli stessi, solo con modi diversi di esprimere la mappa. Il metodo Map.of
è definito per un massimo di dieci elementi nella mappa, mentre il metodo Map.ofEntries
non avrà questo limite.
Nota che in questo caso la mappa risultante sarà una mappa immutabile. Se volete che la mappa sia mutabile, potreste copiarla di nuovo, ad esempio usando mutableMap = new HashMap<>(Map.of("a", "b"));
(Vedere anche JEP 269 e il Javadoc)
No, dovrete aggiungere tutti gli elementi manualmente. Puoi usare un inizializzatore in una sottoclasse anonima per rendere la sintassi un po' più breve:
Map<String, String> myMap = new HashMap<>() {{
put("a", "b");
put("c", "d");
}};
Tuttavia, la sottoclasse anonima potrebbe introdurre comportamenti indesiderati in alcuni casi. Questo include per esempio:
Usare una funzione per l'inizializzazione vi permetterà anche di generare una mappa in un inizializzatore, ma evita brutti effetti collaterali:
Map<String, String> myMap = createMap();
private static Map<String, String> createMap() {
Map<String,String> myMap = new HashMap<String,String>();
myMap.put("a", "b");
myMap.put("c", "d");
return myMap;
}
Questo è un modo.
HashMap<String, String> h = new HashMap<String, String>() {{
put("a","b");
}};
Tuttavia, dovresti stare attento e assicurarti di capire il codice di cui sopra (crea una nuova classe che eredita da HashMap). Pertanto, dovresti leggere di più qui: http://www.c2.com/cgi/wiki?DoubleBraceInitialization o semplicemente usare Guava:
Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);