我有疑问为什么我不能得到这个值
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
,我该如何解决?
答案 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循环中使用。