J'ai un HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Je voudrais maintenant parcourir toutes les valeurs et les imprimer.
J'ai écrit ceci:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Cela ne semble pas fonctionner.
Quel est le problème?
EDIT: Une autre question: cette collection est-elle basée sur zéro? Je veux dire que s'il a 1 clé et la valeur, la taille sera-t-elle 0 ou 1?
java
collections
Utilisateur inconnu
la source
la source
Map
lasize()
méthode de : "Renvoie le nombre de mappages clé-valeur dans cette carte. Si la carte contient plus deInteger.MAX_VALUE
éléments, renvoieInteger.MAX_VALUE
."Réponses:
keySet () ne renvoie qu'un ensemble de clés de votre hashmap, vous devez itérer cet ensemble de clés et obtenir la valeur de la hashmap en utilisant ces clés.
Dans votre exemple, le type de la clé du hashmap est
TypeKey
, mais vous l'avez spécifiéTypeValue
dans votre boucle for générique, il ne peut donc pas être compilé. Vous devriez le changer en:Mise à jour pour Java8:
Si vous n'avez pas besoin d'imprimer la valeur de la clé et avez simplement besoin de la valeur de hashmap, vous pouvez utiliser les suggestions des autres.
La collection renvoyée par
keySet()
est un ensemble. Vous ne pouvez pas obtenir la valeur d'un ensemble à l'aide d'un index, il ne s'agit donc pas de savoir s'il est basé sur zéro ou sur un. Si votre hashmap a une clé, le keySet () retourné aura une entrée à l'intérieur, et sa taille sera 1.la source
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Un moyen simple de voir les paires valeur / clé:
La méthode 1 et la méthode 2 affichent ceci:
la source
System.out.println(map);
, sortie:{b=2, a=1}
System.out.println(map.toString());
.toString
quand c'est possible.En supposant que vous ayez un
Map<KeyType, ValueType>
, vous pouvez l'imprimer comme ceci:la source
Pour imprimer à la fois la clé et la valeur, utilisez ce qui suit:
la source
Vous avez plusieurs options
map.values()
, qui obtient les valeurs, pas les clésmap.entrySet()
qui a les deuxkeySet()
et pour chaque appel de touchemap.get(key)
la source
Vous voulez que la valeur soit définie, pas l'ensemble de clés:
Le code que vous donnez ne serait même pas compilé, ce qui pourrait valoir la peine d'être mentionné dans les prochaines questions - «ne semble pas fonctionner» est un peu vague!
la source
Il convient de mentionner l'approche Java 8, utilisant
BiConsumer
les fonctions et lambda:En supposant que vous ayez remplacé la
toString
méthode des deux types si nécessaire.la source
Pour moi, cette simple ligne a bien fonctionné:
la source
Une simple instruction d'impression avec le nom de variable qui contient la référence de la carte de hachage ferait:
Cela fonctionne car la
toString()
méthode est déjà remplacée dans leAbstractMap class
qui est étendu par leHashMap Class
Plus d'informations de la documentationla source
Nouveau
forEach
style de fonctionnalité Java 8la source
Je l'ai fait en utilisant String Map (si vous travaillez avec String Map).
la source
Utilisation des fonctionnalités de Java 8
la source
Utile pour imprimer rapidement des entrées dans un HashMap
la source
Si la carte contient une collection comme valeur, les autres réponses nécessitent un effort supplémentaire pour les convertir en chaînes, telles que
Arrays.deepToString(value.toArray())
(s'il s'agit d'une carte de valeurs de liste), etc.J'ai rencontré ces problèmes assez souvent et suis tombé sur la fonction générique pour imprimer tous les objets en utilisant
ObjectMappers
. C'est assez pratique à tous les endroits, en particulier lors de l'expérimentation, et je vous recommande de choisir cette façon.la source
Vous pouvez utiliser la
Entry
classe pour lireHashMap
facilement.la source