2017-11-25 115 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(),而不是其他變量。