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