需求:在处理数据时,需要将一个Object类型对象集合转为有序的Map类型集合。
一、问题
1.原代码:
但在使用时出现报错:
Incompatible equality constraint: LinkedHashMap<String, String> and LinkedHashMap
不兼容的相等约束:LinkedHashMap<String,String>和LinkedHashMap
/*** 将表格转化为map集合** @return map集合*/public List<LinkedHashMap<String, String>> getListMap(List<Object> list) {String jsonObj = JSON.toJSONString(list);return JSON.parseArray(jsonObj, LinkedHashMap.class);}
2.根据idea提示修改返回格式
修改为List,则无法加入定义为Map<Integer, List<LinkedHashMap<String, String>>>的Map对象中。
public List<LinkedHashMap> getListMap() {String jsonObj = JSON.toJSONString(list);return JSON.parseArray(jsonObj, LinkedHashMap.class);}
二、格式转换
1.先将集合从JsonArray强制转为List<LinkedHashMap<String,String>>格式
2.对其进行遍历,将数据加入提前初始化的List<LinkedHashMap<String,String>>集合中。
/*** 将list转化为有序的map集合** @return map集合*/public List<LinkedHashMap<String, String>> getListMap(List<Object> list) {List<LinkedHashMap<String, String>> resList = new ArrayList<>();String jsonObj = JSON.toJSONString(list);// 将json字符串转为List<LikedHashMap<String,String>>List<LinkedHashMap<String,String>> listObjectFir = (List<LinkedHashMap<String,String>>) JSONArray.parse(jsonObj);for(Map<String,String> mapList : listObjectFir){LinkedHashMap<String,String> resMap = new LinkedHashMap<>();for (Map.Entry entry : mapList.entrySet()){resMap.put(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));}resList.add(resMap);}return resList;}
Q&A
listObjectFir 定义为List<LinkedHashMap<String,String>>格式,为什么不可以直接返回?
答:若直接返回实际上还是JsonArray格式。