为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2021-12-01 15:20:49
我正在尝试访问 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 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

我会迭代这样的设置,如下所示:


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()returnObject而不是某种类型的List,这就是为什么你不能在 for 循环中迭代它。


使用您的代码进行修复的方法是更改:


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

到:


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


查看完整回答
反对 回复 2021-12-01
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

你只需要在你的代码中使用泛型,然后它就可以完美运行。这是你的泛型代码,


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);

    }

}


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信