Java - 通过arrayList获取映射值

时间:2013-11-24 00:35:16

标签: java arraylist hashmap

我有疑问为什么我不能得到这个值

    HashMap<String, P> users = new HashMap<String, P>();
    users.put("john", new P("john"));

    List<String> arenaUsers = new ArrayList<String>();
    arenaUsers.add("john");

    for (String user : arenaUsers) {
        for (P p : users.get(user)) {
            System.out.println(p.getName());
        }
    }

我收到了错误:

Can only iterate over an array or an instance of java.lang.Iterable

但我无法迭代Map,我该如何解决?

2 个答案:

答案 0 :(得分:0)

在Map中,只有一个键,你只能获得一个值,这就是原因 “只能迭代数组或java.lang.Iterable的实例” 这发生在第二个for循环中,这是唯一的一个值

for (P p : users.get(user))

取而代之的是:

for (String user : arenaUsers) {
        if(users.containsKey(user))
           System.out.println(users.get(user).getName());
    }
}

答案 1 :(得分:0)

此处,您的课程p未实施Iterable,因此无法在for循环中使用它。因此,要在for循环中使用它,您需要实现Iterable或使用已经实现collection的现有Iterable,即

    Map<String, List<String>> map = new HashMap<String, List<String>>();
    List<String> l =new ArrayList<String>();l.add("stack");l.add("overflow");
    map.put("trying", l);
    for(String ss: map.get("trying")){
        System.out.println(ss);
    }

这里我使用了List来实现Iterable并且可以在for循环中使用。