如何按日期字段对集合进行排序?

dro*_*ter 1 java sorting date comparator

我正试图按发布日期对专辑进行排序.出于某种原因,我无法到达任何地方:

//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());
    }            
});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

这是我在发布日期的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
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 6

它看起来像你的startDate领域是类型java.lang.String.至少,输出中的顺序证实了这一点.的String#compareTo()意愿命令String值按字典顺序,而不是由值它代表了旁观者的眼睛.

如果你改变不正确的类型为java.util.Date,或使用SimpleDateFormat#parse()该转换StringDate里面compare()方法,然后调用Date#compareTo()代替,那么排序将正常工作.

我会替换它java.util.Date.始终使用正确的类型表示它所代表的值.