Does Collections.sort keep order on equal elements?

不羁岁月 提交于 2019-11-28 07:10:36

问题


I have a list of objects ordered by a date parameter and want to reorder them by category parameter, but keeping the date order within the category.

Is something like this enough, or do I have to implement a comparator that takes on account the date for objects of the same category?

// 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:


The code in your question will do what you need it to, since Collections.sort() does preserve the order of equal elements.

From the documentation:

This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.

In other words, if the entries are ordered by date before the sort(), they will stay ordered by date within each category after the sort().

If you don't want to rely on the original ordering, you can easily extend your comparator to first compare the categories and then break ties using the dates.



来源:https://stackoverflow.com/questions/28613886/does-collections-sort-keep-order-on-equal-elements

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!