我正在尝试使用比较器从最新日期到最早日期订购一些arraylist。 但我似乎无法做到正确,日期正在排序,但不是从最新到最旧。
感谢任何帮助。
涉及的部分代码:
public class MyFvModel {
...
private long time;
public MyFvModel(String fvName, long fvDate, long id) {
this.fvName = fvName;
this.fvDate = fvDate;
this.id = id;
this.time = System.currentTimeMillis();
}
public long getTime() {
return time;
}
...
public static Comparator<MyFvModel> DateComparator = new Comparator<MyFvModel>() {
public int compare(MyFvModel s1, MyFvModel s2) {
long Date1 = s1.getFvDate();
long curTime = s2.getTime();
if (Date1 < curTime)
return 0;
else
return 1;
}
};
}
答案 0 :(得分:0)
您必须决定要订购哪个变量。如果您想订购fvDate
,那么您的比较应始终与s1.getFvDate()
和s2.getFvDate()
进行比较,而不是与其他变量进行比较。
答案 1 :(得分:0)
您的比较功能错误。如果s1应该在s2之前,则比较函数应该返回负数,如果s1和s2相等,则返回0,如果s1应该在s2之后,则返回正数。
由于您希望将最新值返回到最旧值,因此如果s1比s2更新,则应返回负数,如果相等则返回0,如果更旧则返回正数。您的固定代码是:
public int compare(MyFvModel s1, MyFvModel s2) {
long date1 = s1.getFvDate();
long date2 = s2.getFvDate();
if (date1 > date2)
return -1;
else if(date1 < date2)
return 1;
else
return 0;
};
更简单的版本可能是:
public int compare(MyFvModel s1, MyFvModel s2) {
long date1 = s1.getFvDate();
long date2 = s2.getFvDate();
return date1 - date2;
}