2011-05-19 189 views
1

我有一個arrayList。特殊字符串排序列表,按日期排列

這是一個字符串數組列表。該字符串包含"Date.toString",格式爲"January 1, 1970, 00:00:00 GMT" +任務名稱。

例如:

"January 1, 1970, 00:00:00 GMT clean the house". 

我想排序此ArrayList的日期。
我該怎麼做?

回答

0

編寫你自己的比較器。然後使用Collections.sort(arrayList, myComparator);

Comparator<String> myComparator = new Comparator<String>() { 

int compareTo(String string1, String string2) { 
    ...... 
} 

boolean equals(String str1) { 
    ...... 
} 

} 
+1

小心複雜性:這意味着每個比較解析每個日期字符串 – 2011-05-19 13:39:22

1

寫一個比較器,其中將字符串轉換爲日期進行比較。之後,Collections.sort(List, Comparator);完成這項工作。

+2

謹防複雜性:這意味着解析每個日期字符串每次比較一次 – 2011-05-19 13:39:10

5

可以編寫解析日期和使用date.compareTo(otherDate)對其進行排序比較,但我建議你存儲dates,而不是Strings擺在首位,使分類更加容易(日期實現Comparable<Date>

(如果你的輸入格式爲String,則轉換Strings的時候將它們添加到列表中)

+0

+1,儘管我建議除了*字符串之外還存儲Date * ,而不是「而不是」。 – CPerkins 2011-05-19 13:45:20

+0

@Cperkins然後,你應該upvote克里斯托弗哈馬斯特羅姆的回答:-) – 2011-05-19 13:48:14

+0

+1:尼斯想轉換輸入字符串。 – 2011-05-19 13:51:21

4

對於每個String,將其轉換爲Date,可能使用SimpleDateFormat,並把它們全部放入TreeMap<Date,String>,這會將它們分類給你。

編輯:正如@Sean Patrick Floyd建議的那樣,在輸入時進行。

+0

我喜歡這個想法,這是兩全其美的解決方案(1+) – 2011-05-19 13:47:10

0

數組轉換成日期列表,然後對它們進行排序:如果你想保持任務名稱

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); 

,你將不得不做出這樣的有日期和領域的任務,自己的對象和按日期可比。

2

我會先轉換成這個數組列表,像

public class Event { 
    private Date date; 
    private String description; 
    ... 
} 

之後,建立比較器,2個事件是這樣的:

這將節省您相比萬噸性能(原諒我)爲每個比較解析每個字符串。

+0

+1的另一個有效解決方案,儘管我寧願和我的同事或Christoffer – 2011-05-19 13:52:09