java中的Collections.sort排序

 在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是指降序排列

 

注:其中对于技术开发而言,一些都是以减少工作量为目的,写个通用的方法,将为今后的开发工作省了不少事!

大家有什么问题的,可以留言!

 

posted on 2012-01-12 11:21  java课程设计  阅读(283)  评论(0编辑  收藏  举报

导航