2012-11-07 99 views
0

我正在玩數組和枚舉,我想知道創建一個Comparator類以降序排列這些日期的最有效方法是什麼。繼承人我的代碼。在Java中按降序對數組進行排序

public enum Month {JAN(1), FEB(2), MAR(3), APR(4), MAY(5), JUN(6), JUL(7), 
         AUG(8), SEPT(9), OCT(10), NOV(11), DEC(12);  
     final int monthBoundary; 
     Month(int y){ 
     monthBoundary=y;} 
    } 

    public enum Date {FIRST(1), SECOND(2), THIRD(3), FORTH(4), 
        FIFTH(5)... THIRTYFIRST(31); 
     final int dateBoundary; 
     Date(int z){ 
     dateBoundary=z;} 
    } 

    //constructor etc here 

    private static final List<Cal> calendar = new ArrayList<Cal>(); 
    static { 
    for (Month month : Month.values()) { 
     for (Date date : Date.values()) { 
      calendar.add(new Cal(date, month)); 
     } 
    } 
    } 

    //creates new calendar dates 
    public static ArrayList<Cal> newCal() { 
    return new ArrayList<Cal>(calendar); 
    } 

使用以下語句我可以按照創建的順序打印數組。

System.out.print(Card.calendar()); 

如何創建一個Comparator類來按降序對這些日期進行排序? 理想情況下,我希望它對數組進行排序,無論它是按順序還是隨機排列。 在這個階段,我不關心不存在的日期(例如2月31日),因爲我只是練習和自學......只是試圖理解:) 謝謝。

增加:

public ArrayList<Cal> sortDescending(ArrayList<Cal> calList){ 
    Comparator<Cal> c = Collections.reverseOrder(); 
    Collections.sort(calList, c); 
    return calList; 
} 
+0

好了,你怎麼想,那應該怎麼辦呢?你有沒有想出一些代碼?如果是,請在此發佈。 –

+0

用你自己的比較器試試Collections.sort() – user902383

+0

@RohitJain我添加了我試過的方法。我不確定它是否是實施它的最佳方式 – binary101

回答

3
Collections.sort(list, new Comparator<Cal>() { 
    @Override 
    public int compare(Cal cal1, Cal cal2) { 
     int result = -cal1.getMonth().compareTo(cal2.getMonth())); 
     if (result == 0) { 
      result = -cal1.getDate().compareTo(cal2.getDate())); 
     } 
     return result; 
    } 
}); 
+0

已修復。感謝您注意到錯誤。 –