51 votes

C# Java - Dictionnaires?

Est-il possible en Java pour faire un Dictionnaire avec les éléments déjà déclarée à l'intérieur d'elle? Tout comme le ci-dessous de code C#:

   Dictionary<string, int> d = new Dictionary<string, int>()
    {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };

Comment dois-je faire et quel type dois-je utiliser? J'ai lu que le Dictionnaire est obsolète.

74voto

Sean Reilly Points 9869

Cela va faire ce que vous voulez:

Map<String,Integer> map = new HashMap<String, Integer>(){{
    put("cat", 2);
    put("dog", 1);
    put("llama", 0);
    put("iguana", -1);
}};

Cette déclaration crée un anonyme sous-classe de la table de hachage, où la seule différence de la classe parent est que les 4 entrées sont ajoutées pendant la création de l'instance. Il est assez commun de l'idiome dans le monde Java (même si certains trouvent qu'il est controversé, car il crée une nouvelle définition de la classe).

12voto

fireshadow52 Points 3796
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};

5voto

Luigi Plinge Points 23552

Mordre la balle et de taper le nom de la map!

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("cat", 2);
    map.put("dog", 1);
    map.put("llama", 0);
    map.put("iguana", -1);

Vous pouvez aussi faire quelque chose de ce genre, qui pourrait sauver un peu de temps avec une longue liste:

    Object[][] values = {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };

    for (Object[] o : values) {
        map.put((String) o[0], (Integer) o[1]);
    }

3voto

Sean Patrick Floyd Points 109428

Si vous utilisez la Goyave de la bibliothèque, vous pouvez utiliser de l' ImmutableMap classe, soit par lui-même (exemples 1 et 2), ou comme un initialiseur pour une HashMap (exemples 3 et 4):

Map<String, Integer> map1 = ImmutableMap.<String, Integer> builder()
    .put("cat", 2)
    .put("dog", 1)
    .put("llama", 0)
    .put("iguana", -1)
    .build();
Map<String, Integer> map2 = ImmutableMap.of(
    "cat", 2,
    "dog", 1,
    "llama", 0,
    "iguana", -1
);
Map<String, Integer> map3 = Maps.newHashMap(
    ImmutableMap.<String, Integer> builder()
    .put("cat", 2)
    .put("dog", 1)
    .put("llama", 0)
    .put("iguana", -1)
    .build()
);
Map<String, Integer> map4 = Maps.newHashMap( ImmutableMap.of(
    "cat", 2,
    "dog", 1,
    "llama", 0,
    "iguana", -1)
);

0voto

irreputable Points 25577

Java7 presque a introduit la collection "littéraux" qui permettrait à la syntaxe comme ça. Ils vont probablement essayer de pousser dans Java8. Je n'ai aucune idée de quel est le problème avec ces gens.

Ceci peut être facilement réalisé par une sorte de wrapper API

Map<String,Integer> map = Maps.<String,Integer>empty()
    .put("cat", 2).put("dog",1)....; 

Pas trop mauvais. Je préfère quelque chose comme

map("cat", "dog", ... )
.to(  1,     2,   ... );

Ce genre de chose doit avoir été mis en œuvre par différentes personnes, malheureusement, l'API standard ne comprend par personne, de telles choses.

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