Mais
Como inicializar diretamente um HashMap (de uma forma literal)?
Há alguma forma de inicializar um Java HashMap como este?
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
Qual seria a sintaxe correcta? Eu não encontrei nada sobre isto. Isto é possível? Estou procurando a maneira mais curta/rápida de colocar alguns "final/estático" valores em um mapa que nunca mudam e são conhecidos com antecedência ao criar o Mapa.
986
3
Para Java Versão 9 ou superior:
Sim, isto é possível agora. Em Java 9 foram adicionados alguns métodos de fábrica que simplificam a criação de mapas :
No exemplo acima tanto o
test
como otest2
serão o mesmo, apenas com formas diferentes de expressar o Mapa. O métodoMapa.de' é definido para até dez elementos no mapa, enquanto o método
Mapa.deEntries' não terá tal limite.Note que neste caso o mapa resultante será um mapa imutável. Se você quiser que o mapa seja mutável, você pode copiá-lo novamente, por exemplo, utilizando
mutableMap = new HashMap(Map.of("a", "b"));
(Ver também JEP 269 e o Javadoc)
Para até a versão 8 de Java:
Não, você terá que adicionar todos os elementos manualmente. Você pode usar um inicializador em uma subclasse anônima para tornar a sintaxe um pouco mais curta:
Entretanto, a subclasse anônima pode introduzir comportamentos indesejados em alguns casos. Isto inclui, por exemplo:
O uso de uma função para inicialização também permitirá que você gere um mapa em um inicializador, mas evita efeitos colaterais desagradáveis:
Isto é uma maneira.
No entanto, você deve ter cuidado e certificar-se de compreender o código acima (ele cria uma nova classe que herda do HashMap). Portanto, você deve ler mais aqui: http://www.c2.com/cgi/wiki?DoubleBraceInitialization ou simplesmente usar Goiaba: