簡體   English   中英

Java:比較兩個集合的新對象或更新對象

[英]Java: Comparing two collections for new or updated objects

我有兩個集合或數組列表,它們的大小可能不相等,需要進行比較。 一個集合是從REST負載中新下載的對象集合。 另一個是來自對象集合本地存儲庫的集合。 兩個集合都不會有重復的對象。

這個想法是要找到本地存儲庫中不存在的新對象,或者從本地存儲庫中的現有對象中找到已下載集合中已更新的對象。 因此,該類最終將具有兩個方法來返回新對象和更新對象的Collection

對象的簽名包括:

membershipObject:
                id
                start_date
                end_date
                uniqueId

iduniqueId在集合中是唯一的,因此非常適合進行比較。 start_date通常不會更改,但是end_date可以為null或具有datetime對象。 我有一種支持方法,根據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 3downloadedCollection新值。

考慮到操作的復雜性,比較這兩個集合的理想Java方法是什么? Java SDK 7。

讓哈希表維護本地可用的id(key)和到期信息(值)。 每當您收到新的Valve時,都會在它們之間循環並更新您的存儲庫和哈希表。 這將運行O(n),其中n是新列表中的noof項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM