簡體   English   中英

按日期對特殊字符串的數組列表進行排序

[英]sort array list of special strings, by date

我有一個arrayList。

這是字符串的arrayList。 該字符串包含格式為"January 1, 1970, 00:00:00 GMT""Date.toString" "January 1, 1970, 00:00:00 GMT" +任務名稱。

例如:

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

我想按日期排序此arrayList。
我該怎么做?

可以編寫一個比較器來分析日期並使用date.compareTo(otherDate)對日期進行排序,但是我建議您首先存儲dates而不是Strings ,從而使排序更加容易(Date實現Comparable<Date>

(如果輸入格式為String ,則在將Strings添加到列表時進行轉換)

對於每個String ,可能使用SimpleDateFormat ,將其轉換為Date ,並將它們全部放入TreeMap<Date,String> ,后者將為您排序。

編輯 :就像@Sean Patrick Floyd所建議的那樣,在輸入時執行。

我會先將此數組列表轉換為類似

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

之后,創建一個比較器來比較兩個事件,如下所示:

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

與(請原諒)為每個比較分析每個字符串相比,這將節省大量的性能。

編寫一個比較器,在其中將字符串轉換為日期以進行比較。 Collections.sort(List, Comparator); 在那之后做這份工作。

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

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

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

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

}

將數組轉換為日期列表,然后對其進行排序:

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

如果要保留任務名稱,則必須創建自己的對象,這些對象將日期和任務作為字段,並且可以按日期進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM