Collections.sort 是否保持相等元素的顺序?

2022-09-03 06:12:20

我有一个按日期参数排序的对象列表,并希望按类别参数对它们重新排序,但保持类别中的日期顺序。

这样的东西就足够了吗,还是我必须实现一个比较器来考虑同一类别对象的日期?

// sort the list by category asc(, date asc )
Collections.sort((List<Object>)entries, new Comparator<Object>() {

    @Override public int compare(Object elementA, Object elementB) {
        return elementA.category.compareTo(elementB.category); // what happens when elementA.category.equals(elementB.category)?
    }

});

答案 1

问题中的代码将执行您需要它执行的操作,因为确实保留了相等元素的顺序。Collections.sort()

文档中

这种排序保证是稳定的:相等的元素不会因为排序而重新排序。

换言之,如果条目按 日期在 之前排序,则它们将保持按 日期排序sort()sort()

如果您不想依赖原始排序,您可以轻松扩展比较器,首先比较类别,然后使用日期断开连接。


答案 2

推荐