java - 排序 ArrayList<CustomObject>

标签 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);

最佳答案

为什么不简单地使用 Date#compareTo()用于比较,因为 java.util.Date 实现了 Comparable 接口(interface)。

在排序后,该方法不必返回 List 的实例,因为底层 List 对象将通过调用排序进行修改。基本上,该方法是通过将引用值作为参数传递来调用的。因此,当进行修改时,更改会反射(reflect)在引用值指向的基础对象上。使用这种方法,代码只需将 List 传递到方法中,然后继续在后续代码中使用相同的引用,该引用将指向已排序的基础 List .

要考虑的另一项是修改方法以接受 List 类型的参数,而不是 ArrayList,因为 List 是一个接口(interface),因此更抽象。这将允许代码切换传递给方法的 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我创建了一个完整的工作示例,展示了此方法的实际应用。

关于java - 排序 ArrayList<CustomObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769988/

相关文章:

java - 如何在 Java 中打印颜色的字符串表示

java - 在没有库的情况下转换为 JSONObject 并返回 Kotlin

java - Collections.emptyList() 与新实例

c# - 使用非泛型基类集合作为派生类?

JAVA如何将.map()的返回值追加到列表中而不是返回列表的列表

java - 如何在保持弱一致性的同时迭代 ConcurrentSkipListMap

java - 如果值无效,我如何提示用户重新输入他们的输入值?

c - 冒泡排序不排序和额外元素

python - 对文本文件中的名称进行排序,将结果写入另一个文本文件

c - 合并排序期间的运行时错误