我找到的每个例子都是关于按字母顺序执行的,而我需要按日期排序元素.
My ArrayList包含其中一个DataMember是DateTime对象的对象.在DateTime,我可以调用以下函数:
lt() // less-than
lteq() // less-than-or-equal-to
为了进行比较,我可以这样做:
if(myList.get(i).lt(myList.get(j))){
// ...
}
在if区内我该怎么做?
我找到的每个例子都是关于按字母顺序执行的,而我需要按日期排序元素.
My ArrayList包含其中一个DataMember是DateTime对象的对象.在DateTime,我可以调用以下函数:
lt() // less-than
lteq() // less-than-or-equal-to
为了进行比较,我可以这样做:
if(myList.get(i).lt(myList.get(j))){
// ...
}
在if区内我该怎么做?
您可以使对象具有可比性:
public static class MyObject implements Comparable<MyObject> {
private Date dateTime;
public Date getDateTime() {
return dateTime;
}
public void setDateTime(Date datetime) {
this.dateTime = datetime;
}
@Override
public int compareTo(MyObject o) {
return getDateTime().compareTo(o.getDateTime());
}
}
然后,您可以通过调用以下命令对其进行排序:
Collections.sort(myList);
然而,有时你不想改变你的模型,比如当你想对几个不同的属性进行排序时.在这种情况下,您可以动态创建比较器:
Collections.sort(myList, new Comparator<MyObject>() {
public int compare(MyObject o1, MyObject o2) {
return o1.getDateTime().compareTo(o2.getDateTime());
}
});
但是,仅当您在比较时确定dateTime不为空时,上述方法才有效.最好也处理NULL,以避免NullPointerException:
public static class MyObject implements Comparable<MyObject> {
private Date dateTime;
public Date getDateTime() {
return dateTime;
}
public void setDateTime(Date datetime) {
this.dateTime = datetime;
}
@Override
public int compareTo(MyObject o) {
if (getDateTime() == null || o.getDateTime() == null)
return 0;
return getDateTime().compareTo(o.getDateTime());
}
}
或者在第二个例子中:
Collections.sort(myList, new Comparator<MyObject>() {
public int compare(MyObject o1, MyObject o2) {
if (o1.getDateTime() == null || o2.getDateTime() == null)
return 0;
return o1.getDateTime().compareTo(o2.getDateTime());
}
});