我在尝试对自定义对象的ArrayList进行排序时遇到问题。实际上,在排序之后,我的ArrayList中没有任何变化。我的方法有问题吗?
这是我的艺术家自定义对象属性:
public class Artist {
String mNickname;
String mName;
String mDescription;
String mScene;
String mDay;
String mTime;
String mImageURL;
Date mDate;
// getters and setters below like getDate() for mDate...
以下是用于排序的方法:
static public ArrayList<Artist> sortArrayByDate(ArrayList<Artist> list) {
Collections.sort(list, new Comparator<Artist>() {
@Override
public int compare(Artist lhs, Artist rhs) {
if (lhs.getDate().getTime() < rhs.getDate().getTime())
return -1;
else if (lhs.getDate().getTime() == rhs.getDate().getTime())
return 0;
else
return 1;
}
});
return list;
}
我知道这个主题已经在StackOverflow上多次讨论,但我无法找到为什么我无法使其正常工作。谢谢你的理解
编辑:日期(java.util.date)是使用SimpleDateFormatter
创建的SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CANADA_FRENCH);
答案 0 :(得分:3)
为什么不简单地使用Date#compareTo()进行比较,因为java.util.Date
实现了Comparable
接口。
该方法在排序后不必返回List
的实例,因为底层的List
对象将通过调用sort进行修改。基本上,通过传递引用值作为参数来调用该方法。因此,在进行修改时,更改将反映在引用值指向的基础对象上。使用这种方法,代码只需将List
传递给方法,然后继续在前面的代码中使用相同的引用,这将指向已经排序的基础List
。
要考虑的另一个项目是修改方法以接受List
类型的参数而不是ArrayList
,因为List
是一个接口,因此更抽象。这将允许代码切换传递给方法的List
的实现。这很重要,因为ArrayList
不保证维护列表中项目的顺序。为了保证List
中的项目顺序保持使用LinkedList
。
static public void sortArrayByDate(List<Artist> list) {
Collections.sort(list, new Comparator<Artist>() {
@Override
public int compare(Artist lhs, Artist rhs) {
return lhs.getDate().compareTo(rhs.getDate());
}
});
}
以下是我创建的GitHub Gist,其中显示了此方法的实际应用。