2017-07-22 66 views
-4

我的ArrayList名爲日期是這樣的:Collections.sort(),但從右讀到左

 "12-07-2017; 
     13-07-2017; 
     12-08-2017; 
     11-08-2019;" 

通常情況下,Collections.sort(日期)是:

"11-08-2019; 
    12-07-2017; 
    12-08-2017; 
    13-07-2017" 

但我希望它從右側讀取,而不是從左到右以Collections.sort(日期)的方式應該是這樣的:

"12-07-2017; 
    13-07-2017; 
    12-08-2017; 
    11-08-2019" 
+1

轉換爲'LocalDate'並排序? –

+0

但是有沒有從右向左閱讀的方法?這將會更容易。 –

+0

你可以編寫自己的比較器 –

回答

3

假設你有StringArrayList對象,使得每個字符串格式dd-MM-yyyy稱爲dateStrings

首先創建SimpleDateFormat對象,該對象將作爲將String轉換爲Date對象並返回的基礎。

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 

那麼你StringArrayList對象轉換爲DateArrayList對象。

ArrayList<Date> dates = new ArrayList<>(); 
for (String dateString : dateStrings) { 
    try { 
     dates.add(dateFormat.parse(dateString)); 
    } catch (ParseException e) { 
     System.out.println(e); 
    } 
} 

排序您Date對象使用Collections.sort()(需要,因爲它按升序排序沒有Collections.reverseOrder()比較)。

Collections.sort(dates); 

最後將您DateArrayList對象放回StringArrayList對象。

ArrayList<String> orderedDateStrings = new ArrayList<>(); 
for (Date date : dates) { 
    orderedDateStrings.add(dateFormat.format(date)); 
} 

你現在有你需要的順序串的ArrayListStringsorderedDateStrings

不要忘記導入所有的java.util.ArrayList, java.util.Collections, java.util.Date, java.text.ParseException, java.text.SimpleDateFormat

+0

不要緊,它不會是,但如果我有日期:例如25-07-2017和19-07-2017它將25-07首先 –

+0

爲什麼你需要'Collections.reverseOrder()'? –

+0

對不起,我在我的代碼中犯了一些錯誤,現在修復它們。 –

3

發生這種情況是因爲您按字典順序排列日期表示形式。

你有這樣的兩個選項: