Viac na
Ako priamo inicializovať HashMap (doslovným spôsobom)?
Existuje nejaký spôsob, ako takto inicializovať mapu Java HashMap?:
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
Aká by bola správna syntax? Nenašiel som nič, čo by sa toho týkalo. Je to možné? Hľadám najkratší/najrýchlejší spôsob, ako do mapy vložiť nejaké "konečné/statické" hodnoty, ktoré sa nikdy nemenia a sú vopred známe pri vytváraní mapy.
986
3
Pre Javu verzie 9 alebo vyššej:
Áno, teraz je to možné. V Jave 9 bolo pridaných niekoľko továrenských metód, ktoré zjednodušujú vytváranie máp :
Vo vyššie uvedenom príklade budú
test
ajtest2
rovnaké, len s rôznymi spôsobmi vyjadrenia mapy. MetódaMap.of
je definovaná pre maximálne desať prvkov v mape, zatiaľ čo metódaMap.ofEntries
nebude mať takéto obmedzenie.Všimnite si, že v tomto prípade bude výsledná mapa nemenná mapa. Ak chcete, aby bola mapa mutovateľná, môžete ju opäť skopírovať, napr. pomocou príkazu
mutableMap = new HashMap(Map.of("a", "b"));
(Pozri tiež JEP 269 a Javadoc)
Až do verzie Java 8:
Nie, všetky prvky budete musieť pridať ručne. Môžete použiť inicializátor v anonymnej podtriede, aby bola syntax o niečo kratšia:
Anonymná podtrieda však môže v niektorých prípadoch zaviesť neželané správanie. Patrí sem napr:
Použitie funkcie na inicializáciu vám tiež umožní vytvoriť mapu v inicializátore, ale vyhnete sa nepríjemným vedľajším účinkom:
Toto je jeden zo spôsobov.
Mali by ste však byť opatrní a uistiť sa, že rozumiete vyššie uvedenému kódu (vytvára novú triedu, ktorá dedí od HashMap). Preto by ste si mali prečítať viac tu: http://www.c2.com/cgi/wiki?DoubleBraceInitialization , alebo jednoducho použite Guava: