J'ai besoin d'initialiser un HashMap constant et j'aimerais le faire en une seule ligne. Éviter qc comme ça:
hashMap.put("One", new Integer(1)); // adding value into HashMap
hashMap.put("Two", new Integer(2));
hashMap.put("Three", new Integer(3));
similaire à celui de l'objectif C:
[NSDictionary dictionaryWithObjectsAndKeys:
@"w",[NSNumber numberWithInt:1],
@"K",[NSNumber numberWithInt:2],
@"e",[NSNumber numberWithInt:4],
@"z",[NSNumber numberWithInt:5],
@"l",[NSNumber numberWithInt:6],
nil]
Je n'ai trouvé aucun exemple qui montre comment faire cela après en avoir examiné autant.
Vous pouvez utiliser ImmutableMap de Google Guava. Cela fonctionne tant que vous ne vous souciez pas de modifier la carte plus tard (vous ne pouvez pas appeler .put () sur la carte après l'avoir construite à l'aide de cette méthode):
Voir également: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.html
Une question quelque peu liée: Solution de contournement ImmutableMap.of () pour HashMap dans Maps?
la source
ImmutableMap
n'accepte pas lesnull
clés ou les valeurs.Depuis Java 9, il est possible d'utiliser
Map.of(...)
, comme ceci:Cette carte est immuable. Si vous souhaitez que la carte soit modifiable, vous devez ajouter:
Si vous ne pouvez pas utiliser Java 9, vous êtes obligé d'écrire vous-même une méthode d'aide similaire ou d'utiliser une bibliothèque tierce (comme Guava ) pour ajouter cette fonctionnalité pour vous.
la source
Map.of
on ne fait que jusqu'à 10 entrées car c'est assez laborieuxJava n'a pas de littéral de carte, il n'y a donc pas de moyen agréable de faire exactement ce que vous demandez.
Si vous avez besoin de ce type de syntaxe, pensez à Groovy, qui est compatible Java et vous permet de faire:
la source
Les cartes ont également eu des méthodes d'usine ajoutées dans Java 9. Pour jusqu'à 10 entrées, les cartes ont surchargé les constructeurs qui prennent des paires de clés et de valeurs. Par exemple, nous pourrions construire une carte de différentes villes et de leurs populations (selon google en octobre 2016) comme suit:
Le cas var-args pour Map est un peu plus difficile, vous devez avoir à la fois des clés et des valeurs, mais en Java, les méthodes ne peuvent pas avoir deux paramètres var-args. Le cas général est donc géré en prenant une méthode d'
Map.Entry<K, V>
objets var-args et en ajoutant uneentry()
méthode statique qui les construit. Par exemple:Méthodes d'usine de collecte dans Java 9
la source
Voici un cours simple qui accomplira ce que vous voulez
Et puis de l'utiliser
Cela donne
{a:1, b:2}
la source
Ignorant la déclaration de
x
(qui est nécessaire pour éviter un diagnostic "instruction inaccessible"), techniquement, ce n'est qu'une instruction.la source
Vous pouvez ajouter cette fonction utilitaire à une classe utilitaire:
Remarque: dans
Java 9
vous pouvez utiliser Map.ofla source
Une autre approche peut consister à écrire une fonction spéciale pour extraire toutes les valeurs d'éléments d'une chaîne par expression régulière:
la source