按日期排序特殊字符串的数组列表

时间:2011-05-19 13:33:53

标签: java arraylist sorting

我有一个arrayList。

这是一个字符串数组列表。该字符串包含格式为"Date.toString" +任务名称的"January 1, 1970, 00:00:00 GMT"

例如:

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

我想按日期排序这个arrayList 我该怎么办?

6 个答案:

答案 0 :(得分:5)

可以编写一个比较器来解析日期并使用date.compareTo(otherDate)对它们进行排序,但我建议你将dates而不是Strings存储在第一名,使排序更容易(Date实现Comparable<Date>

(如果您的输入格式为String,则在您将其添加到列表时转换Strings

答案 1 :(得分:4)

对于每个String,将其转换为Date,可能使用SimpleDateFormat,并将它们全部放在TreeMap<Date,String>中,然后为您排序。< / p>

编辑:正如@Sean Patrick Floyd建议的那样,在输入时这样做。

答案 2 :(得分:2)

我会首先将此数组列表转换为类似

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

之后,创建一个比较器来比较2个这样的事件:

public class EventComparator implements Comparator<Event>{
    public int compare(Event e1, Event e2) {
        return e1.getDate().compareTo(e2.getDate());
    }
}

与为每次比较解析每个字符串(原谅我)相比,这将节省大量的性能。

答案 3 :(得分:1)

写一个比较器,在其中将字符串转换为日期以进行比较。 Collections.sort(List, Comparator);之后完成工作。

答案 4 :(得分:0)

编写自己的比较器。然后使用Collections.sort(arrayList, myComparator);

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

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

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

}

答案 5 :(得分: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);

如果要保留任务名称,则必须创建自己的对象,将日期和任务作为字段,并且与日期相当。