我有一個arrayList。特殊字符串排序列表,按日期排列
這是一個字符串數組列表。該字符串包含"Date.toString"
,格式爲"January 1, 1970, 00:00:00 GMT"
+任務名稱。
例如:
"January 1, 1970, 00:00:00 GMT clean the house".
我想排序此ArrayList的日期。
我該怎麼做?
我有一個arrayList。特殊字符串排序列表,按日期排列
這是一個字符串數組列表。該字符串包含"Date.toString"
,格式爲"January 1, 1970, 00:00:00 GMT"
+任務名稱。
例如:
"January 1, 1970, 00:00:00 GMT clean the house".
我想排序此ArrayList的日期。
我該怎麼做?
編寫你自己的比較器。然後使用Collections.sort(arrayList, myComparator);
Comparator<String> myComparator = new Comparator<String>() {
int compareTo(String string1, String string2) {
......
}
boolean equals(String str1) {
......
}
}
寫一個比較器,其中將字符串轉換爲日期進行比較。之後,Collections.sort(List, Comparator);
完成這項工作。
謹防複雜性:這意味着解析每個日期字符串每次比較一次 – 2011-05-19 13:39:10
您可以編寫解析日期和使用date.compareTo(otherDate)
對其進行排序比較,但我建議你存儲dates
,而不是Strings
擺在首位,使分類更加容易(日期實現Comparable<Date>
。
(如果你的輸入格式爲String
,則轉換Strings
的時候將它們添加到列表中)
+1,儘管我建議除了*字符串之外還存儲Date * ,而不是「而不是」。 – CPerkins 2011-05-19 13:45:20
@Cperkins然後,你應該upvote克里斯托弗哈馬斯特羅姆的回答:-) – 2011-05-19 13:48:14
+1:尼斯想轉換輸入字符串。 – 2011-05-19 13:51:21
對於每個String
,將其轉換爲Date
,可能使用SimpleDateFormat
,並把它們全部放入TreeMap<Date,String>
,這會將它們分類給你。
編輯:正如@Sean Patrick Floyd建議的那樣,在輸入時進行。
我喜歡這個想法,這是兩全其美的解決方案(1+) – 2011-05-19 13:47:10
數組轉換成日期列表,然後對它們進行排序:如果你想保持任務名稱
List<Date> dates = new ArrayList<Date>();
for(String s : dateStringArray){
// split the date and task name
Pattern p = Pattern.compile("(\\w+ \\d{1,2}, \\d{4}, \\d{2}:\\d{2}:\\d{2} \\w{3})(.*)");
Matcher matcher = p.matcher(s);
String taskname = "";
String datestring = "";
if (matcher.find()) {
datestring = matcher.group(1);
taskname = matcher.group(2);
}
// parse the date
Date d = new SimpleDateFormat("MMMM dd, yyyy, HH:mm:ss z",
Locale.ENGLISH).parse(datestring);
dates.add(d);
}
// sort the dates
Collections.sort(dates);
,你將不得不做出這樣的有日期和領域的任務,自己的對象和按日期可比。
我會先轉換成這個數組列表,像
public class Event {
private Date date;
private String description;
...
}
之後,建立比較器,2個事件是這樣的:
這將節省您相比萬噸性能(原諒我)爲每個比較解析每個字符串。
+1的另一個有效解決方案,儘管我寧願和我的同事或Christoffer – 2011-05-19 13:52:09
小心複雜性:這意味着每個比較解析每個日期字符串 – 2011-05-19 13:39:22