如何正确访问 ArrayList 以在 HashMap Java 中进行迭代?



>我正在尝试访问HashMap中的ArrayList并对其进行迭代。但是,我目前在以下设置中遇到了问题。

Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> list = Arrays.asList("One", "Two", "Three");
map.put("key_one", list);
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
log.info(pair.getKey());
log.info(pair.getValue().getClass());
for (String element : pair.getValue()) {
log.info(element);
}
}

访问 ArrayList 有一些东西给我带来了问题。

[错误] 必需:数组或 java.lang.Iterable

[错误] 找到: java.lang.Object

如果我访问地图之外的列表,一切正常。它只是在HashMap中访问。

任何指导将不胜感激。谢谢你的时间。

热情的问候

我会像下面这样迭代这样的设置:

Map<String, List<String>> map = new HashMap<>();
List<String> list = Arrays.asList("One", "Two", "Three");
for (Map.Entry<String, List<String>> mapValue : map.entrySet()) {
for (String listValue : mapValue.getValue()) {
// Do stuff
}
}

你的代码不起作用的原因是因为你将pair定义为Map.Entry pair = (Map.Entry)it.next();,没有任何类型。这会导致pair.getValue()返回Object而不是某种List,这就是为什么你不能在for循环中迭代它的原因。

使用代码的解决方法是更改:

Map.Entry pair = (Map.Entry)it.next();

自:

Map.Entry<String, List<String>> pair = (Map.Entry<String, List<String>>) it.next();

您只需要在代码中使用泛型,然后它就可以完美地工作。这是带有泛型的代码,

Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> list = Arrays.asList("One", "Two", "Three");
map.put("key_one", list);
Iterator<Entry<String, List<String>>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, List<String>> pair = it.next();
System.out.println(pair.getKey());
System.out.println(pair.getValue().getClass());
for (String element : pair.getValue()) {
System.out.println(element);
}
}

最新更新