在java web开发中,我们有时会遇到这种情况:从数据库中查询出一串数据,把它们放入了LIST里面 然后在前端页面上显示出来,现在我要在页面上控制它们排序,比如一个下拉框,选择了日期,把查出来的数据进行排序,对于这样的排序要求,我们可以写通用的排序方法。
具体代码如下:
排序算法:
//利用 Collections.sort排序
public void sort(List<E> list,final String method,final String sort){
Collections.sort(list,new Comparator(){
public int compare(Object a,Object b){
int ret = 0;
try{
Method m1 = ((E)a).getClass().getMethod(method, null);
Method m2 = ((E)b).getClass().getMethod(method, null);
if("desc".equals(sort)&&sort!=null){
//因为这个方法是按照字符串去排序的,所对针对于数字排序,思路为:将数字也当成字符串,先去比较长度,若长度一样,就比较字符串大小
ret = String.valueOf(m2.invoke(((E)b), null).toString().length()).compareTo(String.valueOf(m1.invoke(((E)a), null).toString().length()));
if(m2.invoke(((E)b), null).toString().length()==m1.invoke(((E)a), null).toString().length()){
ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString());
}
}else{
ret = String.valueOf((m1.invoke(((E)a), null).toString().length())).compareTo(String.valueOf(m2.invoke(((E)b), null).toString().length()));
}
}catch(NoSuchMethodException e){
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return ret;
}
});
}
在具本list中调用:
SortList<Communication> ls = new SortList<Communication>();
ls.sort(list1, "getRatio", "desc");
其中:list1是从数据库中所查询出来的,getRatio指的是排序列的get方法,desc是指降序排列
注:其中对于技术开发而言,一些都是以减少工作量为目的,写个通用的方法,将为今后的开发工作省了不少事!
大家有什么问题的,可以留言!