排序日期从最新到最旧

时间:2017-11-25 20:22:53

标签: android comparator

我正在尝试使用比较器最新日期到最早日期订购一些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;
        }
    };
}

2 个答案:

答案 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;
}
相关问题