通过其中一个成员对自定义对象的ArrayList进行排序

时间:2016-09-11 01:28:11

标签: java sorting arraylist

如果这是重复的话,我很抱歉,但在我阅读的帖子中找不到解决方案。

我有一个自定义类,包含很少的字符串和日期。我制作了这个结构的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));

2 个答案:

答案 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>());