我有一个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