迭代List <map <string,string =“”>&gt;在Java中

时间:2015-06-25 05:16:44

标签: java

我正在尝试在Java中迭代List<Map<String, String>>。但是,我无法正确迭代它。任何人都可以指导我吗?

Iterator it = list.iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry) it.next();
    System.out.println(pairs.getKey() + " = " + pairs.getValue());
}

谢谢,

4 个答案:

答案 0 :(得分:5)

public static void main(String[] args) {
        List<Map<String, String>> myListOfMaps = new ArrayList<Map<String, String>>();
        Map<String, String> map1 = new HashMap<String, String>();
        map1.put("Fname", "Ankur");

        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("Lname", "Singhal");

        myListOfMaps.add(map1);
        myListOfMaps.add(map2);

        for (int i = 0 ; i < myListOfMaps.size() ; i++) {
            Map<String, String> myMap = myListOfMaps.get(i);
            System.out.println("Data For Map" + i);
            for (Entry<String, String> entrySet : myMap.entrySet()) {
                System.out.println("Key = " + entrySet.getKey() + " , Value = " + entrySet.getValue());
            }
        }
    }

<强>输出

Data For Map0
Key = Fname , Value = Ankur
Data For Map1
Key = Lname , Value = Singhal

答案 1 :(得分:3)

忘记直接使用迭代器,为什么不简单:

List<Map<String,String>> l = new ArrayList<>();
...
// add map elements to list
...

for (Map<String,String> m:l) {
  for (Map.Entry<String,String> e:m.entrySet()) {
    String key = e.getKey();
    String value = e.getValue();
    // Do something with key/value
  }
}

这称为Enhanced for Loop。在内部,它将作为for循环遍历任何集合的迭代器或Iterable接口的任何其他实现来处理它。

它已用于在一个答案中遍历地图条目,为什么不用于地图列表?

当然,对于嵌套集合,您还需要知道如何嵌套for循环(如何将一个for循环放在另一个循环中)。

答案 2 :(得分:1)

使用Map<String, String>类型的元素迭代列表。因此,转换为Map.Entry将为您提供ClassCastException

尝试这样

Iterator it = list.iterator();
while (it.hasNext()) {
    Map<String, String> map = (Map<String, String>) it.next();
    for (Map.Entry entry : map.entrySet()) {
        System.out.println(entry.getKey() + " = " + entry.getValue());
    }
}

如果您不使用原始类型IteratorMap.Entry,那么对您来说会更容易。尽可能使用泛型。所以代码看起来像这样:

Iterator<Map<String, String>> it = list.iterator();
while (it.hasNext()) {
    Map<String, String> map = it.next(); //so here you don't need a potentially unsafe cast
    for (Map.Entry<String, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + " = " + entry.getValue());
    }
}

答案 3 :(得分:0)

list没有entySet()方法!

试试这个:

    final Iterator<Map<String, String>> it = list.iterator();
    while (it.hasNext())
    {
        Map<String, String> mapElement = it.next();
        // do what you want with the mapElement
    }

当然,您需要另一个循环来迭代地图中的元素。