我有一个Java对象列表,它会定期清除,然后从数据库中重新加载对象的更新版本。在重新加载之前,用户可能已选择以某种方式对列表进行排序。我需要找到一个算法,将先前列表的顺序应用于新列表。
我无法使用Comparator,因为对象可能实际上是随机顺序。
这是我的方法存根:
public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfList, List<RetrievedPage> freshCopyOfList)
{
for (RetrievedPage retrievedPage : previousCopyOfList)
{
//reordering, but how?
}
return freshCopyOfList;
}
提前致谢, 百里
答案 0 :(得分:2)
您仍然可以使用比较器,只需根据它们在上一个列表中的位置进行比较。
Collections.sort(freshCopyOfList, new Comparator<RetrievedPage>() {
public int compare(RetrievedPage o1, RetrievedPage o2) {
int firstPagePosition = previousCopyOfList.indexOf(o1);
int secondPagePosition = previousCopyOfList.indexOf(o2);
if (secondPagePosition == -1) return -1;
if (firstPagePosition == -1) return 1;
return firstPagePosition - secondPagePosition;
}
});
当然,如果列表中有不同的对象,则不要忘记在比较的对象中覆盖equals()
和hashCode()
方法。否则indexOf()
方法将查找完全相同的对象,并且不会按照您的意图测试它们是否相等。