如果这是重复的话,我很抱歉,但在我阅读的帖子中找不到解决方案。
我有一个自定义类,包含很少的字符串和日期。我制作了这个结构的ArrayList,现在,我希望使用Date字段将这个ArrayList从最新到最旧排序。我该如何排序这个清单?有没有办法构建一个自定义比较器,它会根据我班上的日期对ArrayList进行排序?
我的班级代码:
arguments
所以我的arraylist声明看起来像那样:
public class ParsedWebData {
String title;
String url;
String description;
Date date;
String dateString;
public ParsedWebData() {
}
public ParsedWebData(String title, String url, String description, Date date, String dateString) {
this.title = title;
this.url = url;
this.description = description;
this.date = date;
this.dateString = dateString;
}
public String getTitle() {
return title;
}
public String getUrl() {
return url;
}
public String getDescription() {
return description;
}
public Date getDate() {return date;}
public String getDateString() {return dateString;}
}
编辑1
我试图使用:
ArrayList<ParsedWebData> data = new ArrayList<>;
但我明白了:
list.sort(Comparator.comparing(ParsedWebData::getDate));
答案 0 :(得分:1)
是的,这可以使用自定义比较器来完成:
data.sort(Comparator.comparing(ParsedWebData::getDate).reversed());
reversed()
调用是从最新到最旧的排序,而不是从最旧到最新的自然顺序。
其他解决方案包括:
data.stream().sorted(...)
)Comparable
答案 1 :(得分:0)
最简单的方法是使用SortedSet(ArrayList默认没有内置排序; TreeSet是具体实现),然后传递一个自定义Comparator,它只委托给日期对象。
因此TreeSet被构造为类似
的东西com.fasterxml.jackson.databind.ext.Java7SupportImpl
自定义Comparator的关键方法如下所示。
set = new TreeSet<ParsedWebData>(new CustomComparator<ParsedWebData>());