我尝试使用日期创建PriorityQueue
。我必须在这个队列中添加一些内容。
问题是如何组织这个优先级队列?并且如何按日期对其进行排序?
要组织队列我使用:
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 :(得分:0)
您需要在创建PriorityQueue时提供Comparator,其中compare方法应该使用两个Date对象并使用Date的自然顺序进行比较。
如果您的VEvent类可以实现Comparable接口
,您也可以使用自然排序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
}
});
答案 1 :(得分: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);
}
});