猿问

如何正确访问 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 中访问。


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


隔江千里
浏览 121回答 2
2回答

慕斯709654

我会迭代这样的设置,如下所示:Map<String, List<String>> map = new HashMap<>();List<String> list = Arrays.asList("One", "Two", "Three");for (Map.Entry<String, List<String>> mapValue : map.entrySet()) {&nbsp; &nbsp; for (String listValue : mapValue.getValue()) {&nbsp; &nbsp; &nbsp; &nbsp; // Do stuff&nbsp; &nbsp; }}您的代码不起作用的原因是因为您定义pair为Map.Entry pair = (Map.Entry)it.next();,没有任何类型。这会导致pair.getValue()returnObject而不是某种类型的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()) {&nbsp; &nbsp; Map.Entry<String, List<String>> pair = it.next();&nbsp; &nbsp; System.out.println(pair.getKey());&nbsp; &nbsp; System.out.println(pair.getValue().getClass());&nbsp; &nbsp; for (String element : pair.getValue()) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(element);&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答