java List<Map<String,String>> 的遍历问题 求解答

项目框架是sprinMvc和mybatis
data是List>
controller层写了一个循环 for(Map map : data){}
data 在控制台打印出来是这种数据格式
图片说明
项目运行这了会报类型转换错误
求解决方法 ,急!在线等

图片说明
这是报错信息

 假设list是List<Map<String,String>>
for (Map<String,String> m : list)
{
for (String key : m.keySet()) { 
  System.out.println("Key = " + key); 
} 
//遍历map中的值 
for String value : m.values()) { 
  System.out.println("Value = " + value); 
}
}

data是ExcleExportBean的集合吗
是不是Object转map报错了?

List> list =new ArrayList>();

    Map<String,Object> items1 =new HashMap<String,Object>();
    items1.put("A", 10);
    items1.put("B", 20);
    items1.put("C", 30);

    Map<String,Object> items2 =new HashMap<String,Object>();
    items2.put("A", 10);
    items2.put("B", 20);
    items2.put("C", 30);

    Map<String,Object> items3 =new HashMap<String,Object>();
    items3.put("A", 10);
    items3.put("B", 20);
    items3.put("C", 30);

    list.add(items1);
    list.add(items2);
    list.add(items3);

    for (Map s: list) {
        for (Object a: s.keySet()) {
            System.out.println(s.get(a));

        }

    }

小兄弟,ExcleExportBean不能这样直接转换成Map的。如果你要把bean转换成bean的话,可以看一下org.apache.commons.beanutils.BeanUtils这里类里面的方法。

报错很明显:ExcelExportBean不能被强转为Map;你看下你的list里装的是什么实体,然后在遍历时用对应实体来接收就行了。

使用这个方法就解决了
Map map = new HashMap();
map.put("AR01", "hello");
map.put("AR02", 2017);
map.put("AR03", "world");
map.put("AR04", 1000);

    List<Map<String, Object>> testList = new ArrayList<Map<String, Object>>();
    testList.add(map);

    for (Map<String, Object> m : testList) {
        for (String k : m.keySet()) {
            System.out.println(k + " : " + m.get(k));
        }

    }

这样应该可以:

 for(Map<String, String> m : data){
     for(Map.Entry<String, String> entry : m.entrySet()){
            System.out.print(entry.getKey() + " -->  " + entry.getValue() );
     }
 }

List> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Map map = new HashMap<>();
map.put((i+1)+"",i+"");
list.add(map);
}
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
Iterator> it = map.entrySet().iterator();
if (it.hasNext()){
Map.Entry next = it.next();
System.out.print("参数----key--"+next.getKey()+"--/value/--"+next.getValue());
}
}

这样遍历 for(ExcleExportBean exbean : data){} 就可以了,你的list里存的是ExcleExportBean而不是Map类型的

你对象转string不是就有问题吗?打印的是地址值 最好贴一下代码

mybatis返回的list实际上是List,由于java的泛型,进行了类型擦出,虽然你用List接受,但是并不会检验其类型,只有实际取出来时才会进行类型转换,从而保存,所以你改一下遍历的对象类型就可以了

for (Map s: list) {
for (Object a: s.keySet()) {
System.out.println(s.get(a));

    }

}

看你的报错信息,好像不是循环遍历的问题,是返回值类型写错了,应该是List吧,不是List>的类型。你在核实一写,方法的返回值是不是对的。此外List>的遍历如下代码:

 List<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
    mapList.add(map);
    for (Map<String, String> m : mapList) {
        for (String k : m.keySet()) {
            System.out.println(k + " : " + m.get(k));
        }
    }