Java 迭代 ArrayList,其中包含 HashMap

2022-09-03 04:35:18

我有一个哈希图,有四个答案。我有前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);  

现在我需要访问所有这些信息,所以我要做的是将两个HashMap添加到一个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;

答案 1

从评论中:

private ArrayList<HashMap> alleAntwoorden;

这就是问题所在。您正在使用原始类型映射,但您正在尝试将单个条目分配给变量 。这不起作用,因为您当前的地图类型为 。将变量更改为:Map.Entry<String, Boolean>HashMap<Object, Object>alleAntwoorden

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

请注意,我还将类型更改为它们的接口类型:您是否应始终在Java中编码为接口


答案 2

在以下接口上:

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

推荐