J'ai un Hashmap avec quatre réponses. Et j'ai pour ex 2 questions. Voici comment je le fais
// Awnsers question 1
antwoorden1.put("Hypertext Preprocessor", true);
antwoorden1.put("Hypertext PHPprocessor", false);
antwoorden1.put("Hypertext processor", false);
antwoorden1.put("Preprocessor PHP", false);
// Awnsers question 2
antwoorden2.put("Model view config", false);
antwoorden2.put("Model view connect", false);
antwoorden2.put("Model view controllers", false);
antwoorden2.put("Model view controller", true);
Maintenant, je dois avoir accès à toutes ces informations. Ce que je fais est donc d’ajouter les deux HashMaps à un ArrayList.
// Add the Hashmaps to the arrayList
alleAntwoorden.add(antwoorden1);
alleAntwoorden.add(antwoorden2);
Mais comment puis-je parcourir ArrayList pour obtenir la clé et la valeur du HashMap? C'est ce que j'ai déjà essayé.
for(int i = 0; i < alleAntwoorden.size(); i++)
{
for (Map.Entry<String, Boolean> entry : alleAntwoorden.get(i).entrySet())
{
String key = entry.getKey();
Object value = entry.getValue();
// ...
}
}
Mais je reçois toujours le message suivant: types incompatibles
Antwoorden1, antwoorden2 et alleAntwoorden sont définis comme suit:
private ArrayList<HashMap> alleAntwoorden;
private HashMap<String, Boolean> antwoorden1, antwoorden2;
Sur les interfaces suivantes:
Map<String, Boolean> map1 = new HashMap<>();
Map<String, Boolean> map2 = new HashMap<>();
List<Map<String, Boolean>> list = new ArrayList<>();
On peut itérer avec des boucles foreach:
for (Map<String, Boolean> entry : list) {
for (String key : entry.keySet()) {
Boolean value = entry.get(key);
System.out.println("key = " + key);
System.out.println("value = " + value);
}
}
Du commentaire:
private ArrayList<HashMap> alleAntwoorden;
C'est le problème. Vous utilisez une carte de type brute, mais vous essayez d'affecter une seule entrée à la variable Map.Entry<String, Boolean>
. Cela ne peut pas fonctionner car votre carte actuelle est de type HashMap<Object, Object>
. Remplacez la variable alleAntwoorden
par:
private List<Map<String, Boolean>> alleAntwoorden;
Attention, j'ai aussi changé les types en leur type d'interface: Si vous codez toujours aux interfaces en Java .
Tout devrait fonctionner avec les définitions suivantes:
Map<String, Boolean> antwoorden1 = new HashMap<>();
Map<String, Boolean> antwoorden2 = new HashMap<>();
List <Map<String, Boolean>> alleAntwoorden = new ArrayList<>();
Si vous utilisez Eclipse, vous pouvez simplement écrire entry.getValue()
. Placez le curseur dessus et utilisez le raccourci clavier Ctrl + 2, l, qui résout automatiquement le type correct.
Pour IntelliJ cela fonctionne presque pareil, mais avec Ctrl + Alt + v