我正在使用此算法按升序对日期列表进行排序:
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);
答案 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
(在我看来)是另一种选择
但是你可以选择。