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

时间:2018-10-21 21:35:19

标签: java hashmap

我正在尝试访问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中访问即可。

任何指导将不胜感激。谢谢您的宝贵时间。

温馨提示

2 个答案:

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