需求:在处理数据时,需要将一个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格式。