对ArrayList <customobject> </customobject>进行排序

时间:2014-07-15 23:47:25

标签: java sorting collections arraylist

我在尝试对自定义对象的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);

1 个答案:

答案 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,其中显示了此方法的实际应用。