我有一个arrayList。
这是一个字符串数组列表。该字符串包含格式为"Date.toString"
+任务名称的"January 1, 1970, 00:00:00 GMT"
。
例如:
"January 1, 1970, 00:00:00 GMT clean the house".
我想按日期排序这个arrayList 我该怎么办?
答案 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);
如果要保留任务名称,则必须创建自己的对象,将日期和任务作为字段,并且与日期相当。