Je voudrais instancier Map<String, List<String>>
en Java,
J'ai essayé
Map<String, List<String>> foo = new <String, List<String>>();
et
Map<String, List<String>> foo = new <String, ArrayList<String>>();
Aucun d'entre eux ne fonctionne. Est-ce que quelqu'un sait instancier cette carte en Java?
new HashMap<String, List<String>>();
ou comme l'a commenté gparyani:
new HashMap<>(); // type inference
Remarque: chaque entrée doit recevoir une liste instanciée en tant que valeur. Vous ne pouvez pas obtenir ("myKey"). Add ("some_string_for_this_key"); la toute première fois que vous en obtenez () une liste.
Donc, récupérez une liste, vérifiez si elle est nulle.
S'il est nul, créez une nouvelle liste, ajoutez-y la chaîne, remettez la liste. Si c'est tout sauf nul, ajoutez-y ou faites ce que vous voulez.
Vous avez oublié de mentionner la classe. Map
voici le type de référence et est une interface . HashMap
de l'autre côté de égal spécifie le type réel de l'objet créé et affecté à la référence foo
.
Map<String, List<String>> foo = new HashMap<String, List<String>>();
Le type réel spécifié (HashMap
ici) doit être assignable au type de référence (Map
ici) c'est-à-dire si le type de référence est un Interface , le type d'objet doit l'implémenter . Et, si le type de la référence est une classe , le type de l'objet doit être le même classe ou son sous-type c'est-à-dire qu'il en sort.
A partir de Java 7 en avant, vous pouvez utiliser un raccourci comme
Map<String, List<String>> foo = new HashMap<>();
Votre deuxième méthode d'instanciation est non recommandée. Restez à utiliser List
qui est une interface .
// Don't bind your Map to ArrayList
new TreeMap<String, ArrayList<String>>();
// Use List interface type instead
new TreeMap<String, List<String>>();
La carte est une interface. Vous devez dire Java quelle classe de carte concrète vous voulez instancier.
Map<String, List<String>> foo = new HashMap<String, List<String>>();
ou
Map<String, List<String>> foo = new TreeMap<String, List<String>>();
etc.