我现在有一个list,每条数据有2列(月,年),比如[[9,2006],[10,2006],[5,2006],[9,2008]],要求是最终排序成[[5,2006],[9,2006],[10,2006],[9,2008]],就是先按年排,再按月排。
如何实现?目前我用的是Collections.sort(list, comparator)这个方法,但是,现在只能实现按年排列,请高手指点,如何在实现年排列的情况下再按月排列。我的代码如下:List list = new ArrayList();
//list2中的数据就是月和年
list.add(list2);
Comparator comparator = new ColumnsComparator();
Collections.sort(listMois, comparator);
class ColumnsComparator implements Comparator {
  public int compare(Object o1, Object o2){
    List list1 = (List)o1;
    List list2 = (List)o2;
    //list1.get(1)是年列,list1.get(0)是月列
    Integer num1 = (Integer)list1.get(1);
    Integer num2 = (Integer)list2.get(1);
    return num1.compareTo(num2);
  }
}
我现在只能实现按年排列,不知道如何同时再按月排列?

解决方案 »

  1.   

    从数据库中查询的时候加上desc xxx这样的根据时间的排序字样就可以哈
      

  2.   

    class ColumnsComparator implements Comparator { 
      public int compare(Object o1, Object o2){ 
        List list1 = (List)o1; 
        List list2 = (List)o2; 
        //list1.get(1)是年列,list1.get(0)是月列 
        Integer num1 = (Integer)list1.get(1); 
        Integer num2 = (Integer)list2.get(1); 
        if  (num1.compareTo(num2)==0){//如何年相等相等,就比较月份
           num1 = (Integer)list1.get(0); 
          num2 = (Integer)list2.get(0);
         } 
        return num1.compareTo(num2); 
      } 

      

  3.   

    zj_pht ,谢谢,这么快就解决了,CSDN上果然牛人多
      

  4.   

    class ColumnsComparator implements Comparator {
      public int compare(Object o1, Object o2){
        List list1 = (List)o1;
        List list2 = (List)o2;
        //list1.get(1)是年列,list1.get(0)是月列
        int compareByYear = list1.get(1) - list2.get(1);
        int compareByMonth = list1.get(0) - list2.get(0);
        return compareByYear == 0 ? compareByMonth : compareByYear
        //按年比较等于0的话,返回按月比较的结果;否则返回按年比较的结果  }