【问题标题】:Java - Get map values by arrayListJava - 通过arrayList获取地图值
【发布时间】:2013-11-24 00:35:15
【问题描述】:

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

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

【问题讨论】:

标签: java arraylist hashmap


【解决方案1】:

这里你的类 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);
    }

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

【讨论】:

    【解决方案2】:

    在 Map for one key 中你只会得到一个值,这就是 “只能遍历数组或 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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多