次のような方法で、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;
}
これを行うためのより良い/標準的な方法はありますか? 状況を複雑にしすぎているような気がします...