将数组的顺序复制到新数组

时间:2011-11-12 17:06:12

标签: java sorting

我有一个Java对象列表,它会定期清除,然后从数据库中重新加载对象的更新版本。在重新加载之前,用户可能已选择以某种方式对列表进行排序。我需要找到一个算法,将先前列表的顺序应用于新列表。

我无法使用Comparator,因为对象可能实际上是随机顺序。

这是我的方法存根:

    public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfList, List<RetrievedPage> freshCopyOfList)
{       
    for (RetrievedPage retrievedPage : previousCopyOfList)
    {
                //reordering, but how?
    }

    return freshCopyOfList;
}

提前致谢, 百里

1 个答案:

答案 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()方法将查找完全相同的对象,并且不会按照您的意图测试它们是否相等。