我有一个对象列表,我希望按日期排序,并带有条件。如果end_date大于或等于今天,那么我的目标是获得一个带有升序end_date的列表,然后是一个按降序start_date排序的列表,用于过去使用end_date的objets。
我有一个这样的模型:
public class Trip implements Serializable, Comparable<Trip> {
public int id;
public Calendar date_begin, date_end;
}
我试过了,但它没有用,或者它太慢了。
@Override
public int compareTo(Trip trip) {
if (date_end.getTimeInMillis() < Calendar.getInstance().getTimeInMillis() &&
trip.date_end.getTimeInMillis() < Calendar.getInstance().getTimeInMillis()) {
return comparePast(trip);
} else if (date_end.getTimeInMillis() > Calendar.getInstance().getTimeInMillis() &&
trip.date_end.getTimeInMillis() > Calendar.getInstance().getTimeInMillis()) {
return compareCurrent(trip);
} else {
return date_end.compareTo(trip.date_end);
}
}
有最简单或最快的方法吗?
答案 0 :(得分:0)
使这段代码变得如此之慢的原因是许多调用Calendar.getInstance()
,创建Calendar对象。如果每次比较调用一次,代码就会快得多。
但是,在单个排序运行中继续创建它们并没有多大意义。您可以设置排序可以使用的静态日历引用,也可以使用System.currentTimeMillis
来获取当前时间。
答案 1 :(得分:0)
基于wvdz回答,我最终使用此方法进行比较:
@Override
public int compareTo(Trip trip) {
long now = System.currentTimeMillis();
if (trip.date_end.getTimeInMillis() > now && date_end.getTimeInMillis() > now) {
return date_begin.compareTo(trip.date_begin);
}
return trip.date_end.compareTo(date_end);
}
它有效!