web-dev-qa-db-fra.com

Itération Java sur ArrayList avec HashMap

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;
14
Bham

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);
    }
}
11
ThisClark

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 .

20
Tom

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<>();
1
David Soroko

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

0
Marcin Szymczak