按日期排序PriorityQueue iCal DtStart

时间:2014-02-09 12:32:13

标签: java icalendar priority-queue comparator

我尝试使用日期创建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());
}

我知道我知道我应该使用比较器,但不知道如何。

如何为上面的代码编写比较器?

2 个答案:

答案 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);
    }
});