2017-06-15 57 views
-3

我有一個包含小時和分鐘的對象列表。該清單亂七八糟,我需要在00:00至23:59之間按小時排序。對日曆ArrayList排序

目的是

public class ProgramItem { 
    public int Hours; 
    public int Minutes; 

    public ProgramItem() { 

    } 

    public ProgramItem(int hours, int minutes, int power) { 
     Hours = hours; 
     Minutes = minutes; 
    } 

    public Calendar getCalendar() { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, Hours); 
     calendar.set(Calendar.MINUTE, Minutes); 

     return calendar; 
    } 
} 

我對它們進行排序的方法是

Collections.sort(items, new Comparator<ProgramItem>() { 
     public int compare(ProgramItem item1, ProgramItem item2) { 
      if (item1.getCalendar().before(item2.getCalendar())) { 
       return -1; 
      } else { 
       return 1; 
      } 
     } 
}) 

例如:

輸入:02:00,09:00,15:00,21 :00,00:00,23:00

輸出應爲:00:00,01:00,02:00,09:00,15:00,21:00,23:00

輸出我有:02:00,09:00,15:00,21:00,23:00,00:00

的問題是,半夜總是在最後,但我需要它在一開始。

如何使排序從00:00開始到3:00-23:59結束? 感謝

回答

1

我相信,主題是不是日曆來排序。如果是這樣,那麼不要使用日曆對象分配更多的內存, 只需簡單地添加此方法,

public class ProgramItem { 
    .... 
    int getAsMins() { 
     return hours *60 + mins; 
    } 
} 
.... 
Collections.sort(items, new Comparator<ProgramItem>() { 
     public int compare(ProgramItem item1, ProgramItem item2) { 
      return item1.getAsMins() - item2.getAsMins(); 
     } 
}); 
1

添加此規則比較:

Collections.sort(items, new Comparator<ProgramItem>() { 
     public int compare(ProgramItem item1, ProgramItem item2) { 
      if (item1.getCalendar().get(Calendar.HOUR) == 0 && item1.getCalendar().get(Calendar.MINUTE) == 0) { 
       return -1 
      } 
      if (item1.getCalendar().before(item2.getCalendar())) { 
       return -1; 
      } else { 
       return 1; 
      } 
     } 
})