Esto va a hacer lo que quiere:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
Esta sentencia crea una subclase anónima de HashMap, donde la única diferencia con respecto a la clase padre es que se añaden las 4 entradas durante la creación de la instancia. Es una expresión bastante común en el mundo de Java (aunque a algunos les resulta controvertido porque crea una nueva definición de clase).
Debido a esta controversia, a partir de Java 9 hay un nuevo lenguaje para la construcción de mapas convenientemente: la familia de estática Map.of methods.
Con Java 9 o superior puede crear el mapa que necesita de la siguiente manera:
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
Con mapas más grandes, esto alternative syntax puede ser menos propenso a errores:
Map<String, Integer> map = Map.ofEntries(
Map.entry("cat", 2),
Map.entry("dog", 1),
Map.entry("llama", 0),
Map.entry("iguana", -1)
);
(Esto es especialmente agradable si Map.entry se importa estáticamente en lugar de estar referenciado explícitamente).
Además de trabajar sólo con Java 9+, estos nuevos enfoques no son del todo equivalente a la anterior:
- que no le permiten especificar qué aplicación se utiliza Mapa
- Ellos sólo crean inmutable mapas
- no crean una subclase anónima de Mapa
sin embargo, estas diferencias no deberían tener importancia para muchos casos de uso, haciendo de esta una buena aproximación por defecto para versiones más nuevas de Java.
hecho lo hace . Gracias. – WildBamaBoy
Y aquí hay una explicación de lo que está haciendo esto. http://techpolesen.blogspot.com/2007/08/java-initializers-add-elements-to.html –
Hmmm ... la sintaxis de dobles llaves generalmente no se considera un buen estilo –