it-swarm.com.ru

Java перебирает ArrayList с HashMap в нем

У меня есть Hashmap с четырьмя ответами. И у меня есть для 2 бывших вопроса. Вот как я это делаю

    // 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);  

Теперь мне нужно получить доступ ко всей этой информации, поэтому я добавляю два HashMaps в один ArrayList 

    // Add the Hashmaps to the arrayList
    alleAntwoorden.add(antwoorden1);
    alleAntwoorden.add(antwoorden2);

Но как я могу перебрать ArrayList, чтобы получить ключ и значение из HashMap? Это то, что я уже пробовал.

    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();
            // ...
        }  
    }

Но я всегда получаю следующее сообщение: несовместимые типы

Antwoorden1, antwoorden2 и alleAntwoorden определяются как: 

private ArrayList<HashMap> alleAntwoorden; 
private HashMap<String, Boolean> antwoorden1, antwoorden2;
14
Bham

На следующих интерфейсах:

Map<String, Boolean> map1 = new HashMap<>();
Map<String, Boolean> map2 = new HashMap<>();
List<Map<String, Boolean>> list = new ArrayList<>();

Мы можем перебрать циклы 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

Из комментария:

private ArrayList<HashMap> alleAntwoorden;

Это проблема. Вы используете карту необработанного типа, но пытаетесь присвоить одну запись переменной Map.Entry<String, Boolean>. Это не может работать, потому что ваша текущая карта имеет тип HashMap<Object, Object>. Измените переменную alleAntwoorden на:

private List<Map<String, Boolean>> alleAntwoorden;

Имейте в виду, что я также изменил типы на их тип интерфейса: Если вы всегда будете кодировать интерфейсы в Java .

20
Tom

Все должно работать со следующими определениями:

Map<String, Boolean> antwoorden1 = new HashMap<>();
Map<String, Boolean> antwoorden2 = new HashMap<>();
List <Map<String, Boolean>> alleAntwoorden = new ArrayList<>();
1
David Soroko

Если вы используете Eclipse, вы можете просто написать entry.getValue(). Поместите курсор поверх него и используйте сочетание клавиш Ctrl + 2, l, которое автоматически разрешает правильный тип.

Для IntelliJ это работает почти так же, но с Ctrl + Alt + v

0
Marcin Szymczak