按collections.sort对JodaTime日期列表进行排序

时间:2017-04-26 12:46:05

标签: android sorting jodatime

我正在使用此算法按升序对日期列表进行排序:

Collections.sort(eventList, new Comparator<Event>() {
        @Override
        public int compare(Event e1, Event e2) {
            DateTime dt1 = new DateTime(e1.getStartDate());
            DateTime dt2 = new DateTime(e2.getStartDate());
            return dt1.isBefore(dt2)? 1:0;
        }
    });
    Event first = eventList.get(0);

我的问题是,这是最好和最正确的做事方式吗?

这是第二个建议:

Collections.sort(eventList, new Comparator<Event>() {
        @Override
        public int compare(Event e1, Event e2) {
            DateTime dt1 = new DateTime(e1.getStartDate());
            DateTime dt2 = new DateTime(e2.getStartDate());
            if(dt1.isBefore(dt2))
                return -1;
            else if(dt1.isAfter(dt2))
                return 1;
            else return 0;
        }
    });
    Event first = eventList.get(0);

2 个答案:

答案 0 :(得分:1)

由于DateTime已经实现了Comparable接口,您可以执行以下操作:

Collections.sort(eventList, new Comparator<Event>() {
    @Override
    public int compare(Event e1, Event e2) {
        DateTime dt1 = new DateTime(e1.getStartDate());
        DateTime dt2 = new DateTime(e2.getStartDate());
        return dt1.compareTo(dt2);
    }
});

答案 1 :(得分:1)

有两种选择。

1 - 使用Comparator来比较每个DateTime的{​​{1}}:

Event

实际上,如果Collections.sort(eventList, new Comparator<Event>() { @Override public int compare(Event event1, Event event2) { DateTime d1 = new DateTime(event1.getStartDate()); DateTime d2 = new DateTime(event2.getStartDate()); return d1.compareTo(d2); } }); 返回getStartDate(),则您不需要创建java.util.Date,因为DateTime也会实现java.util.Date。在这种情况下,您可以这样做:

Comparable

2 - make Collections.sort(eventList, new Comparator<Event>() { @Override public int compare(Event event1, Event event2) { return event1.getStartDate().compareTo(event2.getStartDate()); } }); 实现Event

Comparable

在这种情况下,public class Event implements Comparable<Event> { @Override public int compareTo(Event other) { DateTime dt1 = new DateTime(this.getStartDate()); DateTime dt2 = new DateTime(other.getStartDate()); return dt1.compareTo(dt2); } } Collections.sort(eventList); 将使用Collections.sort方法进行排序。

同样,如果Event.compareTo返回getStartDate(),您只需要执行以下操作:

java.util.Date

选择哪一个?这取决于。

如果您使用备选方案2(实施public class Event implements Comparable<Event> { @Override public int compareTo(Event other) { return this.getStartDate().compareTo(other.getStartDate()); } } ),则表示比较开始日期为&#34; 自然顺序&#34; Comparable个对象(&#34;正常&#34; /&#34;通常&#34;排序事件的方式)。

当您想要使用其他条件(&#34; 自然顺序&#34;除外)进行排序时,使用Event(在我看来)是另一种选择

但是你可以选择。