171 votes

ajouter plusieurs entrées à un HashMap à la fois dans une seule instruction

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 avoir regardé autant.

311voto

Eng.Fouad Points 44085

Vous pouvez utiliser l' initialisation à double accolade comme indiqué ci-dessous :

 Map<String, Integer> hashMap = new HashMap<String, Integer>()
{{
     put("One", 1);
     put("Two", 2);
     put("Three", 3);
}};

À titre d'avertissement, veuillez vous référer au threadEfficiency of Java "Double Brace Initialization" pour les implications que cela pourrait avoir sur les performances.

8voto

Dakusan Points 4094

Voici une classe simple qui accomplira ce que vous voulez

 import java.util.HashMap;

public class QuickHash extends HashMap<String,String> {
    public QuickHash(String...KeyValuePairs) {
        super(KeyValuePairs.length/2);
        for(int i=0;i<KeyValuePairs.length;i+=2)
            put(KeyValuePairs[i], KeyValuePairs[i+1]);
    }
}

Et puis pour l'utiliser

 Map<String, String> Foo=QuickHash(
    "a", "1",
    "b", "2"
);

Cela donne {a:1, b:2}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X