繁体   English   中英

Java-通过arrayList获取地图值

[英]Java - Get map values by arrayList

我有一个疑问,为什么我不能获得这个价值

    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 ,该如何解决?

在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());
    }
}

在这里,您的p类没有实现Iterable因此不能在for循环内使用。 所以要在循环中使用它for您需要实现Iterable或使用已经实现Iterable的现有collection ,即

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM