Détails
Comment initialiser directement un HashMap (de manière littérale) ?
Existe-t-il un moyen d'initialiser un HashMap Java comme ceci ?
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
Quelle serait la syntaxe correcte ? Je n'ai rien trouvé à ce sujet. Est-ce possible ? Je cherche le moyen le plus court/rapide de mettre dans une carte des valeurs "définitives/statiques" qui ne changent jamais et qui sont connues à l'avance lors de la création de la carte.
986
3
Pour Java Version 9 ou supérieure :
Oui, c'est possible maintenant. Dans Java 9, quelques méthodes d'usine ont été ajoutées pour simplifier la création de cartes :
Dans l'exemple ci-dessus,
test
ettest2
seront les mêmes, mais avec des façons différentes d'exprimer la carte. La méthodeMap.of
est définie pour un maximum de dix éléments dans la carte, alors que la méthodeMap.ofEntries
n'aura pas cette limite.Notez que dans ce cas, la carte résultante sera une carte immuable. Si vous voulez que la carte soit mutable, vous pouvez la recopier, par exemple en utilisant
mutableMap = new HashMap(Map.of("a", "b"));
(Voir aussi JEP 269 et la Javadoc)
Jusqu'à la version 8 de Java :
Non, vous devrez ajouter tous les éléments manuellement. Vous pouvez utiliser un initialisateur dans une sous-classe anonyme pour rendre la syntaxe un peu plus courte :
Cependant, la sous-classe anonyme peut introduire un comportement indésirable dans certains cas. Il s'agit par exemple de :
L'utilisation d'une fonction pour l'initialisation vous permettra également de générer une carte dans un initialisateur, mais évite les effets secondaires désagréables :
C'est une façon de faire.
Cependant, vous devez faire attention et vous assurer que vous comprenez le code ci-dessus (il crée une nouvelle classe qui hérite de HashMap). Par conséquent, vous devriez en lire plus ici : http://www.c2.com/cgi/wiki?DoubleBraceInitialization ou simplement utiliser Guava :