我需要以以下方式使用新的 List 集合更新 List 集合:
- 原始列表从新列表中获取新项目
- 原始列表中不在新列表中的项目将被删除
不幸的是,清除原始列表并从新列表重建它不是一种选择,因为那些已经包含具有重要值/引用的对象,我不想丢失。
我需要实现的可以总结如下:
我想出了“某种”可行的“某种”解决方案,但我真的不喜欢它,而且我不确定它的效率如何......
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;
}
有没有更好/标准的方法来做到这一点?我觉得我可能使情况过于复杂...