我正在尝试访问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中访问即可。
任何指导将不胜感激。谢谢您的宝贵时间。
温馨提示
答案 0 :(得分:1)
我将遍历如下设置:
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();
答案 1 :(得分:0)
您只需要在代码中使用泛型即可,然后它可以完美工作。这是您的泛型代码,
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);
}
}