按 collections.sort 对 JodaTime 日期列表进行排序
Sort a list of JodaTime dates by collections.sort
我正在使用此算法按升序对日期列表进行排序:
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);
因为 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);
}
});
有 2 个选择。
1- 使用 Comparator
比较每个 Event
:
的 DateTime
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()
returns 一个 java.util.Date
,你不需要创建一个 DateTime
因为 java.util.Date
也实现了 Comparable
.在这种情况下,您可以这样做:
Collections.sort(eventList, new Comparator<Event>() {
@Override
public int compare(Event event1, Event event2) {
return event1.getStartDate().compareTo(event2.getStartDate());
}
});
2- 使 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()
returns一个java.util.Date
,你只需要做:
public class Event implements Comparable<Event> {
@Override
public int compareTo(Event other) {
return this.getStartDate().compareTo(other.getStartDate());
}
}
选哪个?这取决于。
如果您使用备选方案 2(实现 Comparable
),则意味着比较开始日期是 Event
个对象的“自然顺序”( "normal"/"usual" 排序事件的方式)。
当您想使用不同的标准(而不是“自然顺序”)进行排序时,使用 Comparator
(在我看来)是一种替代方法。
但这取决于你的选择。
我正在使用此算法按升序对日期列表进行排序:
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);
因为 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);
}
});
有 2 个选择。
1- 使用 Comparator
比较每个 Event
:
DateTime
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()
returns 一个 java.util.Date
,你不需要创建一个 DateTime
因为 java.util.Date
也实现了 Comparable
.在这种情况下,您可以这样做:
Collections.sort(eventList, new Comparator<Event>() {
@Override
public int compare(Event event1, Event event2) {
return event1.getStartDate().compareTo(event2.getStartDate());
}
});
2- 使 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()
returns一个java.util.Date
,你只需要做:
public class Event implements Comparable<Event> {
@Override
public int compareTo(Event other) {
return this.getStartDate().compareTo(other.getStartDate());
}
}
选哪个?这取决于。
如果您使用备选方案 2(实现 Comparable
),则意味着比较开始日期是 Event
个对象的“自然顺序”( "normal"/"usual" 排序事件的方式)。
当您想使用不同的标准(而不是“自然顺序”)进行排序时,使用 Comparator
(在我看来)是一种替代方法。
但这取决于你的选择。