目的:将从数据库查询从的数据(list)进行归类,避免前端的多次循环
(1)将结果集转换为list
/**
* 将List<Map<String,Object>>的数据根据map内的key来进行分类(没有改key的map将不会返回结果)
* @param list
* @param key
* @return List<Map<String,Object>> Map:classify-key,value-Map<String,Object>
*/
public static Object classify(List<Map<String,Object>> list,String key){
List result = new ArrayList();
Map<String,Object> tempMap = new HashMap();
List<Object> tempList = new ArrayList<>();
//取出所有类别
for (Map<String,Object> it : list) {
tempMap = it;
if(!tempList.contains(tempMap.get(key))){
tempList.add(tempMap.get(key));
}
}
//根据类别分类数据
for (Object it : tempList) {
Map<String,Object> items = new HashMap();
List<Object> itemList = new ArrayList<Object>();
items.put("classify",it);
for (Map<String,Object> itMap : list) {
tempMap = itMap;
if(tempMap.get(key).equals(it)){
itemList.add(tempMap);
}
}
items.put("value",itemList);
result.add(items);
}
return result;
}
前端数据处理ps:
$.each(dateDataList, function (i, d) {
var date = d['classify'];
$.each(d['value'], function (index, value) {
var val = value['SJLX_ZSYS'];
})
})
(2)将结果集转换为Map
/**
* 将List<Map<String,Object>>的数据根据map内的key来进行分类(没有改key的map将不会返回结果)
* @param list
* @param key
* @return Map<String,List<Map<String,Object>>>:key:key(入参)对应值,value:结果集List
*/
public static Object classifyToMap(List<Map<String,Object>> list,String key){
Map result = new HashMap();
Map<String,Object> tempMap = new HashMap();
List<Object> tempList = new ArrayList<>();
//取出所有类别
for (Map<String,Object> it : list) {
tempMap = it;
if(!tempList.contains(tempMap.get(key))){
tempList.add(tempMap.get(key));
}
}
//根据类别分类数据
for (Object it : tempList) {
List<Object> itemList = new ArrayList<Object>();
for (Map<String,Object> itMap : list) {
tempMap = itMap;
if(tempMap.get(key).equals(it)){
itemList.add(tempMap);
}
}
result.put(it,itemList);
}
return result;
}
总结
结果集为list适合于页面上要拼接的归类属性已经存在的情况,结果集为map适合于页面上要拼接的归类属性不存在也需要手动拼接的情况:
比如说页面根据数据分类来拼接数据,如果这个归类对应的元素存在,则可以直接拼接;如果不存在就要考虑到渲染速度的问题(html代码较多的情况可能出现html渲染完成晚于js代码执行完成的情况),这种情况直接根据归类进行拼接较为合适