時間字符串列表我有一個字符串列表,每一個都包含時間是這樣的:如何排序的Java或Groovy
「上午3時00」,「12:30」,「 16:15「
我需要按順序對它們進行排序:首先放置」am「次並比較小時,而不僅僅是字符串中的第一個數字。
時間字符串列表我有一個字符串列表,每一個都包含時間是這樣的:如何排序的Java或Groovy
「上午3時00」,「12:30」,「 16:15「
我需要按順序對它們進行排序:首先放置」am「次並比較小時,而不僅僅是字符串中的第一個數字。
這適用於常規的字符串,你給了所有的情況下:
List dates = [ "16:15", "12:30 PM", "07:00", "03:00 AM" ]
dates.sort { d ->
[ 'h:mm a', 'H:mm' ].findResult { fmt ->
try {
Date.parse(fmt, d).time
} catch(e) {}
}
}
它基本上與AM/PM嘗試,然後嘗試沒有它,如果失敗
所有Java的分揀機械的 - 例如,Collections.sort()
方法 - 你自己寫一個類的實例實現java.util.Comparator
- 與(或可與合作伙伴)比較工作。該接口有一個compare()
方法,您可以將其實現爲進行任何比較。這就是你需要在這裏做的。
正如@Ernest所說,你需要使用一個比較器。你可以做這樣的事情與你的清單:
List<String> times;
Collections.sort(times, new Comparator<String>() {
@Override
public int compare(String time1, String time2) {
// Sorting implementation here
}
});
使用SimpleDateFormat類,以確定它代表每根弦的時候再排序時比較該數值。它看起來像你和處理可以有各種不同的格式的時間字符串,所以我編輯的答案,支持格式03:00AM
或16:23
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class TimeStringComparator implements Comparator<String>{
private DateFormat primaryFormat = new SimpleDateFormat("h:mm a");
private DateFormat secondaryFormat = new SimpleDateFormat("H:mm");
@Override
public int compare(String time1, String time2){
return timeInMillis(time1) - timeInMillis(time2);
}
public int timeInMillis(String time){
return timeInMillis(time, primaryFormat);
}
private int timeInMillis(String time, DateFormat format) {
// you may need more advanced logic here when parsing the time if some times have am/pm and others don't.
try{
Date date = format.parse(time);
return (int)date.getTime();
}catch(ParseException e){
if(format != secondaryFormat){
return timeInMillis(time, secondaryFormat);
}else{
throw e;
}
}
}
public static void main(String[] args){
List<String> times = Arrays.asList(new String[]{"03:00 AM", "12:30 PM", "16:15"});
Collections.sort(times, new TimeStringComparator());
System.out.println(times);
}
}