2017-05-05 5 views
2

私は、比較が必要な不等サイズのコレクションまたはArraylistsを2つ持っています。 1つのコレクションは、RESTペイロードからオブジェクトの新しくダウンロードされたコレクションです。もう1つは、オブジェクトのコレクションのローカルリポジトリからのコレクションです。どちらのコレクションにも重複するオブジェクトはありません。Java:新しいオブジェクトまたは更新されたオブジェクトの2つのコレクションを比較する

ローカルリポジトリに存在しない新しいオブジェクトや、ダウンロードされたコレクション内のオブジェクトがローカルリポジトリの既存のオブジェクトから見つかるようにします。これにより、クラスは最終的に二つの新しいオブジェクトのコレクションを返すための方法および更新されたオブジェクトを持つことになり、オブジェクトの

署名で構成されています

membershipObject: 
       id 
       start_date 
       end_date 
       uniqueId 

iduniqueIdに最適ですコレクションにユニークでありますそれらを比較する。 start_dateは通常変更されませんが、end_dateはnullでもdatetimeオブジェクトでもかまいません。 end_datenullであるかどうかによって、オブジェクトが「アクティブ」または「非アクティブ」であるかどうかを調べるサポート方法があります。

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から新しいです。

操作の複雑さを考慮して、これら2つのコレクションを比較する理想的なJavaの方法は何ですか? Java SDK 7

+2

一般に、データを比較して何が変更されたかを判断することはありません。代わりに、何かを変更したときに管理システムに見たいものがわかるようにするために、「ダーティ」フラグを設定します。 – azurefrog

+2

上記の操作を実行する必要がある場合は、メンバオブジェクトに対して適切な 'hashCode()'メソッドと対応する 'equals()'メソッドを実装できます。次に、新しくダウンロードされたリストの要素を含む 'HashSet'を作成し、次に参照リストの要素を' removeAll() 'します。どの要素が残っているかは、メンバーのequals()メソッドで定義されている意味で、参照リストとは異なるか、または異なっています。 –

+0

@azurefrogこれはRESTサービスからダウンロードされているため、サービスがクライアント上の何が汚いかを知ることは実際には期待できません。クライアントが実際にサービスの最新データを使用するだけでなく、変更された内容を実際に知る必要があると仮定すると、JohnBollingerのソリューションは非常に優れています。 –

答えて

0

ハッシュテーブルにid(キー)と有効期限情報(値)@ localを保持させます。あなたがそれらを通って新しい弁のループを受け取り、urリポジトリとハッシュテーブルを更新するたびに。これにより、O(n)、が実行されます.nは新しいリストの項目数です。

関連する問題