2017-11-25 118 views
2

我想从最新日期到最早的日期使用比较来命令一些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; 
     } 
    }; 
} 
+1

你在什么地方看看Java文档的[** **比较(https://开头的文档。 oracle.com/javase/8/docs/api/java/util/Comparator.html#compare-TT-)何时返回“-1”,“0”,“1”的方法。 –

+0

也许这可以帮助https://stackoverflow.com/a/14050012/2940733 –

回答

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; 
} 
+1

Thx jonathanrz,我很接近。 – Simon

0

您必须对您要订购哪个变量决定。如果你想要订购fvDate,那么你的比较应该总是比较s1.getFvDate()s2.getFvDate(),而不是其他变量。

相关问题