2014-02-09 1 views
0

Я пытаюсь создать PriorityQueue с датами. И я должен добавить что-то в эту очередь. Вопрос в том, как организовать эту очередь приоритетов? И как я могу сортировать его по дате?Сортировка PriorityQueue iCal DtStart по дате

Для организации очереди я использую это:

FileInputStream fis = new FileInputStream("calendar.ics"); 
CalendarBuilder builder = new CalendarBuilder(); 
Calendar calendar = builder.build(fis); 

ComponentList listEvent = calendar.getComponents(Component.VEVENT); 

PriorityQueue plan = new PriorityQueue(); 
for (Object elem : listEvent) { 
    VEvent event = (VEvent) elem; 
    plan.add(event.getStartDate()); 
} 

Я знаю, я знаю, что я должен использовать компаратор, но, но не знает, как.

Как написать компаратор для кода выше?

ответ

0

Если вы используете iCal4j, вы можете создать свой объект плана сортировать события следующим образом:

PriorityQueue<VEvent> plan = new PriorityQueue<VEvent>(10, new Comparator<VEvent>() {  
    @Override 
    public int compare(VEvent e1, VEvent e2) 
    { 
     Date d1 = e1.getStartDate().getDate(); 
     Date d2 = e2.getStartDate().getDate(); 
     return d1.compareTo(d2); 
    } 
}); 
0

Вам необходимо предоставить Comparator при создании PriorityQueue, в котором метод сравнения должен принимать два объекта Date и использовать естественное упорядочение даты для сравнения.

Вы также можете использовать естественный порядок, если ваш класс VEVENT может реализовать Сопоставимый интерфейс

PriorityQueue<DtStart> plan = new PriorityQueue<DtStart>(10,new Comparator<DtStart>(){  
@Overide 
public int compare(DtStart d1,DtStart d2) 
{ 
//your logic goes here for comparing two DtStart Objects 
} 
}); 
+0

но getStartDate() работает с объектом DtStart. И прежде, чем сравнить Дата объектов я должен исправить это: «несовместимые типы: DtStart не могут быть преобразованы в Date» – Mjavka

+0

Да, то вы должны реализовать компаратор с точки зрения DtStart кода образца: - PriorityQueue план = новый PriorityQueue (10, новый компаратор() { @Overide общественных ИНТОГО сравнение (DtStart d1, d2) DtStart { возвратного // логики сравнения DtStart объектов } }); –