【发布时间】:2015-04-21 05:47:06
【问题描述】:
我有一个按日期参数排序的对象列表,并希望按类别参数对它们重新排序,但将日期顺序保持在类别内。
这样的事情就足够了吗,还是我必须实现一个比较器来考虑同一类别对象的日期?
// 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)?
}
});
【问题讨论】:
-
IMO 如果您需要按某事进行排序,按某事进行排序——不要让它碰运气,或另一种排序的结果。
-
Collections.sort在幕后使用Arrays.sort,它执行合并排序。该合并排序的代码是here。 -
最好先阅读 Javadoc 中的某个方法,然后再在 Stack Overflow 上询问该方法的确切用途。在这种特殊情况下,Javadoc 非常非常清楚地回答了您的问题。
-
感谢您清除它!我实际上在写问题时在文档上找到了
This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.,但我不确定equal elements是指比较器的结果还是实际上将元素(而不是它们的属性)与objectA.equals(objectB)进行比较,我知道很可能不会是这样,但我想 100% 确定(我什至做了一个测试来检查它,但我想要一些批准,以防这只是巧合,我想这有点偏执)。
标签: java sorting collections comparator