讓我們假設我有一個對象,它看起來像這樣:如何比較兩個對象列表之間的字段?
public class Supermarket {
public String supermarketId;
public String lastItemBoughtId;
// ...
}
,我有超市的兩份名單,一個「老」,另一個「新」(即一個是本地的,另一種是從檢索雲)。
List<Supermarket> local = getFromLocal();
List<Supermarket> cloud = getFromCloud();
我想找出所有對Supermarket
對象(給出supermarketId
)具有lastItemBoughtId
彼此不同的。
第一溶液我想到被迭代第一List
,則每次該local.get(i).supermarketId.equals(cloud.get(j).supermarketId)
,檢查所述i
元件的lastItemBoughtId
是從j
元素的id不同的第一次迭代的迭代的第二個,並且內部。如果不同,我將整個Supermarket
對象添加到新列表中。
更清晰,像這樣:
List<Supermarket> difference = new ArrayList<>();
for (Supermarket localSupermarket : local) {
for (Supermarket cloudSupermarket : cloud) {
if (localSupermarket.supermarketId.equals(cloudSupermarket.supermarketId) &&
!localSupermarket.lastItemBoughtId.equals(cloudSupermarket.lastItemBoughtId))
difference.add(cloudSupermarket);
}
}
顯然,這看起來大大效率低下。有沒有更好的方法來處理這種情況?
看看這個例子。 http://stackoverflow.com/questions/11260628/how-to-find-the-differences-between-two-array-lists-based-on-a-property –
您不能將列表更改爲地圖?這將使得使用代表ID獲得元素更加容易。 – SomeJavaGuy