通用的自定义排序类
程序员文章站
2022-04-25 16:30:17
...
public class SortList<E>{
public int compareMap(Object a, Object b, final String method,final String type, final String sort){
long ret = 0;
try {
Method m1 = ((E)a).getClass().getMethod(method, null);
Method m2 = ((E)b).getClass().getMethod(method, null);
switch(type){
case "String":
if(sort != null && "desc".equals(sort)){//倒序
ret = String.valueOf(m2.invoke(((E)b), null)).compareTo(String.valueOf(m1.invoke(((E)a), null)));
}else{
ret = String.valueOf(m1.invoke(((E)a), null)).compareTo(String.valueOf(m2.invoke(((E)b), null)));
}
break;
case "Date":
if(sort != null && "desc".equals(sort)){//倒序
ret = ((Date)(m2.invoke(((E)b), null))).getTime()-((Date)(m1.invoke(((E)a), null))).getTime();
}else{
ret = ((Date)(m1.invoke(((E)a), null))).getTime()-((Date)(m2.invoke(((E)b), null))).getTime();
}
break;
case "Integer":
if(sort != null && "desc".equals(sort)){//倒序
ret = toInt(String.valueOf(m2.invoke(((E)b), null))).compareTo(toInt(String.valueOf(m1.invoke(((E)a), null))));
}else{
ret = toInt(String.valueOf(m1.invoke(((E)a), null))).compareTo(toInt(String.valueOf(m2.invoke(((E)b), null))));
}
break;
default:
if(sort != null && "desc".equals(sort)){//倒序
ret = String.valueOf(m2.invoke(((E)b), null)).compareTo(String.valueOf(m1.invoke(((E)a), null)));
}else{
ret = String.valueOf(m1.invoke(((E)a), null)).compareTo(String.valueOf(m2.invoke(((E)b), null)));
}
break;
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return (int)ret;
}
/**
* map 先放的条件优先
* @param list
* @param sortMap
* @param sort
*/
public void SortMuitled(List<E> list, final LinkedHashMap<String,String> sortMap, final String sort){
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
long ret = 0;
try{
for(String key:sortMap.keySet()){
ret = compareMap((E)a,(E)b,key,sortMap.get(key),sort);
if(ret!=0){
return (int)ret;
}
}
}catch(Exception ne){
System.out.println(ne);
}
return (int)ret;
}
});
}
private Integer toInt(String num){
if(StringUtil.isNotNull(num)){
try{
return Integer.parseInt(num);
}catch (Exception e) {
// TODO: handle exception
return 0;
}
}else{
return 0;
}
}
}
使用方法
SortList<TestVO> sort=new SortList<>();
List<TestVO> list=new ArrayList<>();
TestVO t1=new TestVO("1","1","1",DateUtil.stringToDate(2, "2018-05-04 09:00:00"));
TestVO t2=new TestVO("2","2","2",DateUtil.stringToDate(2, "2018-05-04 10:00:00"));
TestVO t3=new TestVO("3","2","2",DateUtil.stringToDate(2, "2018-05-04 08:00:00"));
list.add(t1);
list.add(t2);
list.add(t3);
LinkedHashMap<String, String> sortMap = new LinkedHashMap<>();
sortMap.put("getTime", "Date");
sortMap.put("getId", "String");
sort.SortMuitled(list, sortMap, "asc");
根据放入map顺序,优先第一个条件,第一条件相同按第二条件排
上一篇: Django中的Form表单
下一篇: easyUI中冻结表头
推荐阅读
-
C#导出数据到CSV文件的通用类实例
-
asp的通用数据分页类
-
Flash怎么自定义类? flash自定义一个类的教程
-
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
-
兼容多浏览器的字幕特效Marquee的通用js类
-
PHP分页显示的方法分析【附PHP通用分页类】
-
python自定义类并使用的方法
-
C#使用IComparer自定义List类实现排序的方法
-
Python 自定义元类的两种写法
-
C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换(第二版-增加深度读取和更新功能)