Копирование порядка массива в новый массив - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть список объектов Java, который периодически очищается, а затем перезагружается с обновленными версиями объектов из базы данных. Перед перезагрузкой пользователь, возможно, решил заказать список определенным образом. Мне нужно найти алгоритм, который применяет порядок предыдущего списка к новому списку.

Я не могу использовать Comparator, поскольку объект может быть в произвольном порядке.

Вот мой метод заглушки:

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

    return freshCopyOfList;
}

Спасибо заранее, Barry

1 Ответ

2 голосов
/ 12 ноября 2011

Вы все еще можете использовать компаратор, просто сравните элементы в зависимости от их положения в предыдущем списке.

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() будет искать точно такой же объект и не будет проверять их на равенство так, как вы намереваетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...