我知道有很多关于排序列表/数组等的帖子,但我对最佳方法有点困惑。我的对象列表还包含一个日期字段 - 但该日期存储为字符串,所以我需要先将它们全部转换然后排序,还是有办法使用此参数对列表中的对象进行排序,而无需先转换它们?
基本上就是这个清单:
List<NewsFeed> newslist;
NewsFeed对象:
String title;
String description;
String URL;
String date;
日期看起来像:
Fri Dec 26 23:00:00 AEDT 2014
答案 0 :(得分:2)
使用此
Collections.sort(newsList, new Comparator<NewsFeed>() {
DateFormat f = new SimpleDateFormat("dd/MM/yyyy");//or your pattern
@Override
public int compare(NewsFeed o1, NewsFeed o2) {
try {
return f.parse(o1.getDate()).compareTo(f.parse(o2.getDate()));
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
});
使用Comparable
,它看起来像这样:
public class NewsFeed implements Comparable<NewsFeed>{
//your fields and getters/setters
private DateFormat f = new SimpleDateFormat("dd/MM/yyyy");//or your pattern
@Override
public int compareTo(NewsFeed o) {
try {
return f.parse(this.getDate()).compareTo(f.parse(o.getDate()));
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
}
答案 1 :(得分:2)
您的班级NewsFeed
必须实施Comparable
界面和@override compareTo
方法来定义排序规则。然后使用Arrays.sort
方法对newslist
进行排序。
class NewsFeed implements Comparable<NewsFeed>{
//members
@Override
public int compareTo(NewsFeed o) {
// TODO Your sort rule
return 0;
}
}
List<NewsFeed> newslist;
...
Arrays.sort(newslist);
答案 2 :(得分:0)
在阅读RSS时将字符串转换为日期,并将其作为日期存储在NewsFeed对象中。然后,您可以实现Comparable接口并委托给日期。
您转换compareTo方法日期的任何答案都会进行不必要的大量转换。
答案 3 :(得分:0)
如果你不能只将日期存储为Date对象,则需要定义一个自定义比较器(最终会隐式地将Strings转换为Date对象,所以你真的可以将它们存储为日期)。您可以将这两个定义为类中的字段:
private final static String dateFormat = "EEE MMM dd HH:mm:ss yyyy";
private final static Comparator<String> dateComp = new Comparator<String>() {
public int compare(String s1, String s2) {
Date d1 = null;
try {
d1 = new SimpleDateFormat( dateFormat,Locale.ENGLISH ).parse(s1);
} catch (ParseException e) {
//HANDLE THIS EXCEPTION
}
Date d2 = null;
try {
d2 = new SimpleDateFormat( dateFormat,Locale.ENGLISH ).parse(s2);
} catch (ParseException e) {
//HANDLE THIS EXCEPTION
}
return d1.compareTo(d2);
}
};
当然,您必须有效地处理所需的try / catch块和潜在的解析异常。此外,您必须确定传入日期字符串的格式。
以下是使用上述比较器的示例:
String[] dateArray = new String[] {"Sat Dec 27 23:00:00 2014","Fri Dec 26 23:00:00 2014","Sun Dec 28 23:00:00 2014"};
List<String> dateList = new ArrayList<String>(Arrays.asList(dateArray));
Collections.sort(dateList, dateComp);
打印:
[Fri Dec 26 23:00:00 2014, Sat Dec 27 23:00:00 2014, Sun Dec 28 23:00:00 2014]