HashMap - 获取"只能遍历数组或java.lang.Iterable"的实例。

时间:2018-01-16 21:42:28

标签: java hashmap iterator

如何搜索包含String作为键的Hashmap和作为值的对象列表?

HashMap<String,List<PageObjectBaseClass>> ObjList1;

当我使用

for (HashMap<String,List<PageObjectBaseClass>> map : ObjList1)

得到错误&#34;只能遍历数组或java.lang.Iterable&#34;

的实例

4 个答案:

答案 0 :(得分:2)

您需要按照entrySet这样列举:

for (Map.Entry<String, List<PageObjectBaseClass>> map : ObjList1.entrySet()){
    ....
}

答案 1 :(得分:1)

您只能在实现Iterable接口的对象上使用扩展的for循环。 Map没有。

但是,它提供了一些实用方法来访问类型为Iterable的条目,键和值的集合。因此,请考虑以下示例:

HashMap<A, B> map = new HashMap<>();

// Entries
for (Map.Entry<A, B> entry : map.entrySet​()) { ... }

// Keys
for (A key : map.keySet()) { ... }

// Values
for (B value : map.values()) { ... }

以下是所有三种方法文档的链接:

请注意,所有三次访问都很快,O(1)。当您获得地图内部使用的集合时。这也是他们支持地图的原因,这意味着如果您更改集合或条目上的内容,更改也会反映在地图内。

答案 2 :(得分:1)

有很多方法。我认为最具惯用性和表现力的是Map.forEach

yourMap.forEach((key, value) -> {
    // key is of type String
    // value is List<PageObjectBaseClass>
});

答案 3 :(得分:-1)

这是here

的例子
public static void printMap(Map mp) {
    Iterator it = mp.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
        it.remove(); // avoids a ConcurrentModificationException
    }
}