Does Collections.sort keep order on equal elements?

collections, comparator, java, sorting

Solution

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.

Problem

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)? } }); ```

Original source