Мне нужно обновить коллекцию List с новой коллекцией списка таким образом, что:Обновление коллекции Список <MyClass> на основе нового списка <MyClass> коллекция
- оригинальный список получает новые предметы из нового списка
- элементы в первоначальном списке, которые не находятся на новом списке удаляются
к сожалению, очистка исходного списка и восстановления его из новой не вариант, потому что те уже имеют объекты с важными ценностями/ре я не хочу терять.
Что мне нужно, чтобы достичь можно резюмировать следующим образом:
я придумал «какой-то» решение, которое «рода» работает, но я действительно не нравится, и я не уверен, насколько эффективно это ...
class MyClass{
int someInt;
String someString;
int rowID; // DB reference, cannot lose it...
...
}
public static List<MyClass> mergeMyClassLists(List<MyClass> origList, List<MyClass> newList){
Integer index[]= new Integer[origList.size()];
// Find the ones to remove from the old list
int c=0;
for(MyClass origMyClass:origList){
if(!hasMyClass(newList,origMyClass)) index[c] = origList.indexOf(origMyClass);
c++;
}
// Then remove them
for(int i:index){
if(index[i]!=null)
origList.remove(index[i]);
}
//Add new ones
for(MyClass newMyClass:newList){
if(!hasMyClass(origList,newMyClass)) origList.add(newMyClass);
}
return origList;
}
private static boolean hasMyClass(List<MyClass> myClassList, MyClass myClass){
for(MyClass mc:myClassList){
// Are they the same? based on my own criteria here
if(mc.someInt == myClass.someInt && mc.someString.equals(myClass.someString)) return true;
}
return false;
}
есть ли лучше/стандартный способ сделать это? У меня такое чувство, что я могу быть слишком усложняющим ситуацию ...
Как насчет использования карты? – BobTheBuilder
'origList.retainAll (newList); newList.removeAll (origList); origList.addAll (newList); 'может быть? Нужен хороший 'MyClass.equals, hashcode'. –
Я хочу совместить объекты, которые могут быть не совсем одинаковыми (например, у одного из них нет значения для rowID), но они совпадают в зависимости от установленного мною условия. – Crocodile