Bonjour, cela me confond un peu (gel du cerveau!) Et il me manque quelque chose. Avoir un ArrayList que je remplis avec un HashMap. Maintenant, je mets dans mon HashMap et arraylist.
Map.put(DATE, value1);
Map.put(VALUE, value2);
arraylist.put(Map);
Depuis que j'analyse un JSON, la taille de l'arraylist augmente. Ma question est la suivante: comment obtenez-vous les valeurs des deux clés de la carte dans la liste? j'ai essayé ça
if(!list.isEmpty()){ // list is an ArrayList
for(int k = 0; k < list.size(); k++){
map = (HashMap)list.get(k);
}
}
Log.d(TAG, "map size is" + map.size());
String [] keys = new String[map.size()];
String [] date_value = new String[map.size()];
String [] value_values = new String[map.size()];
int i = 0;
Set entries = map.entrySet();
Iterator iterator = entries.iterator();
while(iterator.hasNext()){
Map.Entry mapping = (Map.Entry)iterator.next();
keys[i] = mapping.getKey().toString();
date_value[i] = map.get(keys[i]);
if(keys[i].equals(DATE)){
date_value[i] = map.get(keys[i]);
} else if(keys[i].equals(VALUE)){
value_values[i] = map.get(keys[i]);
}
i++;
}
Mais je n'arrive pas à obtenir toutes les valeurs. la taille de la carte renvoie toujours une valeur de 2, qui ne comprend que les éléments. Comment puis-je obtenir toutes les valeurs des touches Map dans ArrayList? Merci
Pourquoi voulez-vous réinventer la roue, alors que vous avez déjà quelque chose à faire votre travail. La méthode Map.keySet()
vous donne un ensemble de toutes les clés de la carte.
Map<String, Integer> map = new HashMap<String, Integer>();
for (String key: map.keySet()) {
System.out.println("key : " + key);
System.out.println("value : " + map.get(key));
}
De plus, votre première boucle semble étrange pour moi: -
for(int k = 0; k < list.size(); k++){
map = (HashMap)list.get(k);
}
Vous parcourez votre liste et assignez chaque élément au même reference - map
, ce qui écrasera toutes les valeurs précédentes. Tout ce que vous aurez, c'est la dernière carte de votre liste.
MODIFIER: -
Vous pouvez également utiliser entrySet
si vous voulez à la fois la clé et la valeur de votre carte. Ce serait mieux pour vous: -
Map<String, Integer> map = new HashMap<String, Integer>();
for(Entry<String, Integer> entry: map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
P.S. : -
Votre code me semble confus. Je suggère de garder ce code de côté et de penser à votre design
une fois de plus. Pour l'instant, en l'état actuel du code, il est très difficile de comprendre ce que l'on tente de faire.
Essayez de cette façon ...
J'envisage la HashMap
avec clé et valeur de type String
, HashMap<String,String>
HashMap<String,String> hmap = new HashMap<String,String>();
hmap.put("key1","Val1");
hmap.put("key2","Val2");
ArrayList<String> arList = new ArrayList<String>();
for(Map.Entry<String,String> map : hmap.entrySet()){
arList.add(map.getValue());
}
Le constructeur de liste accepte toute structure de données qui implémente l'interface Collection à utiliser pour construire une liste
Pour obtenir toutes les touchesdepuis une carte de hachage vers une liste:
Map<String, Integer> map = new HashMap<String, Integer>();
List<String> keys = new ArrayList(map.keySet());
Pour obtenir toutes les valeurs d’une carte de hachage en une liste:
Map<String, Integer> map = new HashMap<String, Integer>();
List<Integer> values = new ArrayList(map.values());
Mettez i ++ quelque part à la fin de votre boucle.
Dans le code ci-dessus, la position 0 du tableau est écrasée car i n'est pas incrémenté dans chaque boucle.
FYI: le ci-dessous effectue une recherche redondante:
if(keys[i].equals(DATE)){
date_value[i] = map.get(keys[i]);
} else if(keys[i].equals(VALUE)){
value_values[i] = map.get(keys[i]);
}
remplacer par
if(keys[i].equals(DATE)){
date_value[i] = mapping.getValue();
} else if(keys[i].equals(VALUE)){
value_values[i] = mapping.getValue()
}
Un autre problème est que vous utilisez i
pour date_value
et value_values
. Ceci n'est valide que si vous avez l'intention d'avoir des valeurs NULL dans votre tableau.
C'est incroyablement vieux, mais je suis tombé sur lui en essayant de trouver une réponse à une question différente.
ma question est: comment obtenez-vous les valeurs des deux clés de la carte dans la liste?
for (String key : map.keyset()) {
list.add(key + "|" + map.get(key));
}
la taille de la carte retourne toujours une valeur de 2, qui ne comprend que les éléments
Je pense que vous pouvez être dérouté par les fonctionnalités de HashMap
. HashMap
autorise uniquement 1 à 1 relations dans la carte.
Par exemple si vous avez:
String TAG_FOO = "FOO";
String TAG_BAR = "BAR";
et essayez de faire quelque chose comme ça:
ArrayList<String> bars = ArrayList<>("bar","Bar","bAr","baR");
HashMap<String,String> map = new HashMap<>();
for (String bar : bars) {
map.put(TAG_BAR, bar);
}
Ce code finira par définir l’entrée de clé "BAR"
à associer au dernier élément de la liste bars
.
Dans votre exemple, vous semblez confus qu'il n'y a que deux éléments, mais que vous n'en avez que deux clés enregistrées, ce qui me laisse penser que vous avez simplement écrasé le champ de chaque clé plusieurs fois.
Supposons que j'ai Hashmap avec le type de données key comme KeyDataType Et le type de données value comme ValueDataType
HashMap<KeyDataType,ValueDataType> list;
Ajoutez-y tous les éléments dont vous aviez besoin . Vous pouvez maintenant récupérer toutes les clés de hashmap dans une liste.
KeyDataType[] mKeys;
mKeys=list.keySet().toArray(new KeyDataType[list.size()]);
Donc, maintenant vous avez toutes vos clés dans un tableau mkeys []
vous pouvez maintenant récupérer n'importe quelle valeur en appelant
list.get(mkeys[position]);
Solution Java 8 pour la chaîne de production telle que "clé1: valeur1, clé2: valeur2"
private static String hashMapToString(HashMap<String, String> hashMap) {
return hashMap.keySet().stream()
.map((key) -> key + ": " + hashMap.get(key))
.collect(Collectors.joining(","));
}
et produire une liste simple recueillir en tant que liste
private static List<String> hashMapToList(HashMap<String, String> hashMap) {
return hashMap.keySet().stream()
.map((key) -> key + ": " + hashMap.get(key))
.collect(Collectors.toList());
}