web-dev-qa-db-fra.com

Arrays.asList également pour les cartes?

J'ai le code ci-dessous:

Map<String, Map<Double, String>> map = new HashMap<>();
Map<Double,String> Amap = new HashMap<>();
map.put(getValuesTypes.FUT(), HERE);

Au lieu de créer d'abord une carte et de la mettre à "ICI", je recherche une fonction que je pourrais utiliser avec un ListArrays.asList(...)so que je peux simplement entrer à "Here" ?.asMap({1.0,"A"}, {2.0,"B"})

10
PowerFlower

Vous pouvez initialiser HashMap comme ceci.

new HashMap<Double, String>() {
    {
        put(1.0, "ValA");
        put(2.0, "ValB");
    }
};
9
nakano531

Avec goyave

Map<Double, String> map = ImmutableMap.of(1.0, "A", 2.0, "B");
4
Jiri Kremser

Guava's ImmutableMap.of (..) peut aider dans cette direction:

ImmutableMap.of(1, "a");

dans le JDK, il n'y a que Collections.singletonMap (..) , mais cela ne vous fournit qu'une carte avec une paire unique.

Il y avait un discussion dans projet goyave pour contenir une Maps.asMap(Object... varArgs), mais il a été arrêté. Donc, ImmutableMap.of (...) est la voie à suivre.

EDIT depuis le JDK 9

Dans la JDK 9, de nouvelles méthodes faisant la même chose ont été ajoutées: Map.of (K, V)

3
Olimpiu POP

Il n'y a pas de littéral pour initialiser une carte de cette façon. Mais vous pouvez utiliser une classe anonyme générant sur place:

map.put(getValuesTypes.FUT(), new HashMap<Double, String>() {{
    put(1.0, "A");
    put(2.0, "B");
}});

bien que ce ne soit pas recommandé. Je suggérerais d'utiliser ImmutableMap de Guava:

map.put(getValuesTypes.FUT(), ImmutableMap.<Double, String>of(1.0, "A", 2.0, "B"));

Si le nombre de paires est supérieur à 5, vous devez utiliser leur builder :

map.put(getValuesTypes.FUT(), 
        ImmutableMap.<Double, String>builder().put(1.0, "A")/* 5+ puts */.build());
1
Andrew Tobilko

Vous ne pouvez initialiser une nouvelle carte qu'en utilisant une classe anonyme. c'est à dire.

new HashMap<K, V>() {{ put(key, value); put(key, value); }};

0
vikram jakhar