最近一直在写一个java的业务系统,后台对数据库的操作工作量巨大,这个是我在写代码时遇到的,总结出来的方法,希望能帮助到需要的人,什么也不多说了,直接上源码吧!
从数据库中取数据,根据MyBits返回结果主要有两种类型的List,一种是List<Entity>,还一种是List<Map<String,Object>>
以下是对List<Entity>的归类
/**
* 将对象列表按名称分类成Map(分类名必与对象的某 get方法的后的名一致<如:getName则传入“Name">
* @param list
* @param name
* @return
*/
public static <T> Map<String,List<T>> objListToMapClassificationByName(List<T> list,String name){
Map<String,List<T>> resultMap = Maps.newHashMap();
for (T obj : list) {
try {
Method method = obj.getClass().getMethod("get" + name);
String keyName = (String) method.invoke(obj);
if(StringUtils.isBlank(keyName))
continue;
List<T> tempList = null;
if (!resultMap.containsKey(keyName)) {
tempList = new ArrayList<>();
} else {
tempList = resultMap.get(keyName);
}
tempList.add(obj);
resultMap.put(keyName, tempList);
}
catch (Exception e) {
}
}
return resultMap;
}
/**
* 将对象列表按名称建立索引,分类名必与对象的某 get方法的后的名一致<如:getName则传入“Name">
* @param list
* @param name
* @return
*/
public static <V,T> HashMap<V, T> getObjListToMapForOnlyByName(List<T> list, String name) /*throws Exception*/{
HashMap<V, T> mapResult=Maps.newHashMap();
if(list != null && list.size() >0){
for(T obj : list) {
try{
Method method = obj.getClass().getMethod("get" + name);
mapResult.put((V)method.invoke(obj), obj);
}
catch (Exception e){
break;
}
}
}
return mapResult;
}
以下是对List<Map<String,Object>>的归类
/**
* 获取按字段索引的列表(可重复)
* @param list
* @param name
* @return HashMap<String,List<Map<String, Object>>>
*/
public static HashMap<String,List<Map<String, Object>>> getListClassifiedMapByName(List<Map<String, Object>> list,String name){
HashMap<String,List<Map<String, Object>>> mapResult=Maps.newHashMap();
if(list != null && list.size() >0) {
for (Map<String, Object> map : list) {
String keyName = (String) map.get(name);
if(StringUtils.isBlank(keyName))
continue;
List<Map<String, Object>> tempList = null;
if (!mapResult.containsKey(keyName)) {
tempList = new ArrayList<>();
} else {
tempList = mapResult.get(keyName);
}
tempList.add(map);
mapResult.put(keyName, tempList);
}
}
return mapResult;
}
/**
* 将列表按照某个key分类,可重复(内容拷贝,不影响原list)
* @param list
* @param name
* @return HashMap<String,List<Map<String, Object>>>
*/
public static HashMap<String,List<Map<String, Object>>> getNewListClassifiedMapByName(List<Map<String, Object>> list,String name){
HashMap<String,List<Map<String, Object>>> mapResult=Maps.newHashMap();
for (Map<String, Object> map : list) {
String keyName=(String) map.get(name);
Map<String, Object> valueMap = Maps.newHashMap();
valueMap.putAll(map);
List<Map<String, Object>> tempList = null;
if(!mapResult.containsKey(keyName)) {
tempList = new ArrayList<>();
}
else {
tempList = mapResult.get(keyName);
}
tempList.add(valueMap);
mapResult.put(keyName, tempList);
}
return mapResult;
}
/**
* 将列表按照某个key分类,唯一内容(内容拷贝,不影响原list)
* @param list
* @param name
* @return HashMap<String,Map<String, Object>>
*/
public static HashMap<String,Map<String, Object>> getNewListClassifiedMapForOnlyByName(List<Map<String, Object>> list,String name){
HashMap<String,Map<String, Object>> mapResult=Maps.newHashMap();
for (Map<String, Object> map : list) {
String keyName=(String) map.get(name);
if(StringUtils.isBlank(keyName))
continue;
Map<String, Object> valueMap = Maps.newHashMap();
valueMap.putAll(map);
mapResult.put(keyName, valueMap);
}
return mapResult;
}