2017-05-08 84 views
-6

我有一個數組列表與時間。我想按時間升序排序。 我用這個,但它不輸出我想要的。隨着時間排序Arraylist

List<String> l = new ArrayList<>(); 
l.add("12:20 PM"); 
l.add("12:32 PM"); 
l.add("12:30 PM"); 
l.add("12:10 PM"); 
l.add("12:08 PM"); 
l.add("12:00 PM"); 
Collections.sort(l, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
    try { 
     return new SimpleDateFormat("h:mm a").parse(o1).compareTo(new SimpleDateFormat("hh:mm a").parse(o2)); 
    } catch (ParseException e) { 
     return 0; 
    } 
    } 
}); 
System.out.println(l); 

我需要:

12:00 PM 
12:08 PM 
12:10 PM... 

同樣

+0

你得到了嗎?...... –

+0

這已經被蜜蜂回答了。事實上,幾乎相同的標題。 – ItamarG3

+1

也許是一個小錯誤,但格式不同。你有一個「h:mm a」,另一個有「hh:mm a」。 –

回答

1

讓我們從這裏開始:

} catch (ParseException e) { 
    return 0; 
} 

ParseException的手段解析出了問題。您正在壓制並將其變爲:兩個字符串等於相同的時間。

只是不這樣做。

然後我還建議不是存儲字符串,但在該列表中的日期對象。你必須明白,每個比較都會導致這些格式化步驟。換句話說,對字符串進行排序而不是日期會造成巨大的開銷!

換句話說,首先將所有字符串轉換爲日期,然後對日期進行排序。

0

您的日期格式是錯誤的:

try { 
    return new SimpleDateFormat("h:mm a").parse(o1).compareTo(new SimpleDateFormat("hh:mm a").parse(o2)); 
} catch (ParseException e) { 
    return 0; 
} 

應該hh:mm a因爲有兩個數字代表在你的例子小時。

這是由於您的字符串與格式不匹配導致ParseException。將異常處理爲將字符串視爲相同。這不是處理該錯誤的好方法。

因此,由於沒有字符串匹配格式,所以每個比較都會導致異常,將字符串視爲相同,因此沒有任何內容會重新排序。

+0

在我的電腦上,它使用'h:mm a'很好地和正確地解析,即使在'12:20 PM'的小時內有兩位數字,等等。 –