我有一个按日期参数排序的对象列表,并希望按类别参数重新排序,但要将日期顺序保留在类别中。
是否足够这样,或者我是否必须实施一个比较器,该比较器考虑了同一类别对象的日期?
// 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)?
}
});
答案 0 :(得分:16)
您问题中的代码将执行您需要的操作,因为Collections.sort()
确实保留了相等元素的顺序。
此类保证稳定:由于排序,相同的元素不会被重新排序。
换句话说,如果条目按sort()
之前的日期排序,则sort()
之后的日期将按照>的顺序排列。
如果您不想依赖原始订单,您可以轻松扩展比较器,首先比较类别,然后使用日期打破关系。