我正在尝试按发布日期对相册进行排序。出于某种原因,我无法到达任何地方:
//sort by release date
Collections.sort(this._items, new Comparator<Album>() {
public int compare(Album t1, Album t2) {
int dateCmp = t2.getStartDate().compareTo(t1.getStartDate());
Log.i("==Albums==", "dateComp: " + dateCmp);
return t1.getStartDate().compareTo(t2.getStartDate());
}
});
我做错了什么?
以下是我在发布日期的Foo Fighters Albums输出中看到的内容:
name: There Is Nothing Left To Lose | release date: 11/2/1999
name: Greatest Hits | release date: 11/3/2009
name: Skin And Bones | release date: 11/7/2006
name: Foo Fighters | release date: 12/10/2003
name: DOA | release date: 12/13/2005
name: Rope | release date: 3/1/2011
name: The Colour And The Shape | release date: 3/30/2010
答案 0 :(得分:6)
您的startDate
字段的类型为java.lang.String
。至少,输出中的顺序证实了这一点。 String#compareTo()
将按字典顺序排列String
个值,而不是它在旁观者眼中所代表的值。
如果您将错误的类型更改为java.util.Date
,或使用SimpleDateFormat#parse()
将String
转换为Date
方法中的compare()
,然后调用{ {3}}然后,排序将按预期工作。
我会用java.util.Date
替换它。始终对其所代表的值使用正确的类型。
答案 1 :(得分:0)
这是完整的代码。问题是因为开始日期是字符串类型。
//按发布日期排序
Collections.sort(this._items, new Comparator<Album>() {
public int compare(Album t1, Album t2) {
int dateCmp = 0;
try {
SimpleDateFormat formatter;
Date date1;
Date date2;
formatter = new SimpleDateFormat("dd/mm/yyyy");
date1 = (Date)formatter.parse(t1.getStartDate());
date2 = (Date)formatter.parse(t2.getStartDate());
dateCmp = (date2).compareTo(date1);
}
catch (Exception e)
{
//Log.i("==Albums==", "album special sort - error" );
}
//Log.i("==Albums==", "dateComp: " + dateCmp);
return dateCmp;
}
});