Я предлагаю вам поместить оба списка в отдельные отсортированные списки или отсортированные карты (отсортированная карта, если объекты не реализуют «сопоставимые»).
Это будет очень быстро и не займет столько ресурсов. После этого у вас будет два отсортированных списка, вы можете сделать один проход. Начните с двух отсортированных коллекций, таких как:
list 1 list 2
original updated
a b
c c
d e
f g
g
Если вы сделаете два указателя (на первый элемент в каждом списке), вы можете сравнить их. Если они совпадают, вы можете проверить наличие «Обновлений» (добавить его в потенциально обновленный список). В противном случае один должен быть «Меньше», чем другой (а «Меньше», чем б). Если «Нижний» находится в списке 1, добавьте его в список «новых» объектов. Если «Нижний» находится в списке 2, добавьте его в столбцы «Удаленные».
Затем просто увеличьте указатель до нижнего из двух и повторите.
Есть и другие способы это может быть проще, например,
sharedList = originalList.removeAll(updatedList)
сделает это:
(a, c, d, f, g) .removeAll (b, c, e , g) вернет (c, g), которые являются дублирующими значениями, это значения, которые могут быть обновлены (они существовали в обоих списках).
Первоначальный список станет (a, d , f) после удаления (c, g) это список «старых» значений, которые были удалены между двумя списками.
Чтобы получить список «новых элементов», вам просто нужно удалить ранее существующие элементы, которые вы только что сгенерировали, из «обновленного» списка.
updated.removeAll(shared)
превратит ваш обновленный список в список «новых / добавленных» элементов.
(b , c, e, g) .removeAll (c, g) оставит (b, e) в «обновленном» списке, который станет вашим списком «добавленных» объектов.