我正在尝试在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());
}
谢谢,
答案 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());
}
}
如果您不使用原始类型Iterator
和Map.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
}
当然,您需要另一个循环来迭代地图中的元素。