Java在其中使用HashMap迭代ArrayList
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java在其中使用HashMap迭代ArrayList相关的知识,希望对你有一定的参考价值。
我有一个有四个答案的Hashmap。我有前两个问题。我就是这样做的
// 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();
// ...
}
}
但我总是得到以下消息:不兼容的类型
Answers1,Answers2和所有答案定义为:
private ArrayList<HashMap> alleAntwoorden;
private HashMap<String, Boolean> antwoorden1, antwoorden2;
在以下界面上:
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);
}
}
来自评论:
private ArrayList<HashMap> alleAntwoorden;
这就是问题。您正在使用原始类型映射,但是您尝试将单个条目分配给变量Map.Entry<String, Boolean>
。这不起作用,因为您当前的地图是HashMap<Object, Object>
类型。将变量alleAntwoorden
更改为:
private List<Map<String, Boolean>> alleAntwoorden;
记住,我还将类型改为接口类型:Should you always Code To Interfaces In Java。
一切都应该与以下定义一起使用:
Map<String, Boolean> antwoorden1 = new HashMap<>();
Map<String, Boolean> antwoorden2 = new HashMap<>();
List <Map<String, Boolean>> alleAntwoorden = new ArrayList<>();
如果你使用Eclipse,你可以写entry.getValue()
。将光标放在其上并使用键盘快捷键Ctrl + 2,l,它会自动解析正确的类型。
对于IntelliJ,它的工作方式几乎相同,但使用Ctrl + Alt + v
正如其他用户所说,有更好的方法来执行此类任务,但如果您想使用您的方法,这是一个正常运行的代码段:
HashMap antwoorden1 = new HashMap();
HashMap antwoorden2 = new HashMap();
// 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);
ArrayList<HashMap> alleAntwoorden = new ArrayList<HashMap>();
// Add the Hashmaps to the arrayList
alleAntwoorden.add(antwoorden1);
alleAntwoorden.add(antwoorden2);
for(int i = 0; i < alleAntwoorden.size(); i++)
{
Iterator it = (Iterator)alleAntwoorden.get(i).entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
以上是关于Java在其中使用HashMap迭代ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
在 Java(或 Scala)中迭代 HashMap 的 HashMap