我有兩個類別或可能的ArrayList不同尺寸,將需要比較的比較兩個集合。 One Collection是來自REST有效負載的新下載的對象集合。另一個是來自對象集合的本地存儲庫的集合。這兩個集合都不會有重複的對象。Java的:新的或更新的對象
的想法是找到這不已經下載的收集從本地存儲庫中的現有對象更新本地資源庫或對象是否存在新的對象。因此,該類最終將有兩種方法可以返回新對象的收集和更新的對象
簽名的對象包括:
membershipObject:
id
start_date
end_date
uniqueId
id
和uniqueId
是使得它理想的集合中的唯一比較它們。 start_date
通常不會更改,但end_date
可以爲空或具有日期時間對象。我有一個支持方法,根據end_date
是否爲null
來查找對象是「活動」還是「非活動」。
與客體被認爲是如果更新自從我上次下載end_date
發生了變化。
例如:
downloadedCollection
0:
id: 1
start_date: 2017-05-01 00:00:00
end_date: null
uniqueId: <unique-string-abc>
1:
id: 2
start_date: 2017-04-01 00:00:00
end_date: 2017-05-02 00:00:00
uniqueId: <unique-string-cde>
2:
id: 3
start_date: 2017-05-01 10:00:00
end_date: null
uniqueId: <unique-string-def>
localCollection
0:
id: 1
start_date: 2017-05-01 00:00:00
end_date: null
uniqueId: <unique-string-abc>
1:
id: 2
start_date: 2017-04-01 00:00:00
end_date: null
uniqueId: <unique-string-cde>
在上述例子中,id 2
已被更新並id 3
距離downloadedCollection
新。
什麼是理想的Java方法這兩個集合考慮操作的複雜性比較? Java SDK的7
一般來說,你不嘗試的數據進行比較,以確定發生了什麼變化。相反,當您更改任何內容以讓任何管理系統知道要查看什麼時,您會設置一個「髒」標誌。 – azurefrog
如果您需要執行所描述的操作,那麼您可以爲成員對象和相應的equals()方法實現一個體面的'hashCode()'方法。然後創建一個包含新下載列表的元素的'HashSet',然後'removeAll()'引用列表的元素。無論保留哪些元素都是新的或與參考列表不同,按照成員的equals()方法定義。 –
@azurefrog由於這是從REST服務下載的,因此不能期望服務知道客戶端上的內容是什麼。假設客戶端實際需要知道更改的內容(而不是簡單地使用服務中的最新數據),JohnBollinger的解決方案非常好。 –