2つのArrayListsから異なる要素をすべて保持し、それらを別々の配列に保存します。私はローカルとリモートのArrayListを持っています(ローカルは私のデバイスにあり、私はローカルデータベースから読み込んで作成しています)。あなたは私のサーバーから取得していると推測できるリモート。 ローカルリストからすべての要素をidで削除するために、ローカルとリモートの違いをすべて知りたい(リモートのlsitに最新のデータが含まれていると仮定して)。他の要素に含まれていない要素のリストを返します[JAVA/ANDROID]
マイリモートリストはこの1つである:
[
{
"userID": 8,
"address": "6 Lamond Place, Aberdeen, AB25 3UT",
"price": 1,
"lastUpdated": "1466437965391",
"id": 175
},
{
"userID": 8,
"address": "26 Meadgrey, Edinburgh, EH4",
"price": 4,
"lastUpdated": "1466438561094",
"id": 176
}
]
私のローカルリストがあるが、このデータが含まれています。
[
Property{id=174, userID=8, address='4', price='3', lastUpdated='1466437959249'},
Property{id=175, userID=8, address='6 Lamond Place, Aberdeen, AB25 3UT', price='1', lastUpdated='1466437965391'},
Property{id=176, userID=8, address='26 Meadgrey, Edinburgh, EH4', price='4', lastUpdated='1466438561094'}
]
これは私が今やっているものです:
public void retainAllLocalFromRemote(List<Property> remoteProperties) {
ArrayList<Property> localProperties = getAllPropertyItems();
Log.d(TAG, "Local db size: " + localProperties.size());
Log.d(TAG, "Remote db size: " + remoteProperties.size());
ArrayList<Property> differences = new ArrayList<>();
for(int i = 0; i < localProperties.size(); i ++){
if(remoteProperties.contains(localProperties.get(i))){
Log.d(TAG, "remote contains local property with id: " + localProperties.get(i).getId());
}else {
differences.add(localProperties.get(i));
}
}
Log.d(TAG, "differences list size: " + differences.size());
Log.d(TAG, "differences list : " + differences.toString());
}
これがされ私の現在のログ出力:
Getting all properties from the database...
06-21 09:54:50.965 10585-10585/xdesign.georgi.espc_retrofit D/EspcItemDataSource: Local db size: 3
06-21 09:54:50.965 10585-10585/xdesign.georgi.espc_retrofit D/EspcItemDataSource: Remote db size: 2
06-21 09:54:50.966 10585-10585/xdesign.georgi.espc_retrofit D/EspcItemDataSource: differences list size: 3
06-21 10:00:48.192 10585-10585/xdesign.georgi.espc_retrofit D/EspcItemDataSource: differences list :[
Property{id=174, userID=8, address='4', price='3', lastUpdated='1466437959249'},
Property{id=175, userID=8, address='6 Lamond Place, Aberdeen, AB25 3UT', price='1', lastUpdated='1466437965391'},
Property{id=176, userID=8, address='26 Meadgrey, Edinburgh, EH4', price='4', lastUpdated='1466438561094'}]
明らかに、違いのリストはサイズが大きいため、問題があります。私が間違っていることは何ですか?
Property.equals()はどのように見えますか? –
@TimCastelijnsいいえ私はPropertyクラスで実装していません。それが私が間違った結果になるのはなぜですか? –