私は、比較が必要な不等サイズのコレクションまたはArraylistsを2つ持っています。 1つのコレクションは、RESTペイロードからオブジェクトの新しくダウンロードされたコレクションです。もう1つは、オブジェクトのコレクションのローカルリポジトリからのコレクションです。どちらのコレクションにも重複するオブジェクトはありません。Java:新しいオブジェクトまたは更新されたオブジェクトの2つのコレクションを比較する
ローカルリポジトリに存在しない新しいオブジェクトや、ダウンロードされたコレクション内のオブジェクトがローカルリポジトリの既存のオブジェクトから見つかるようにします。これにより、クラスは最終的に二つの新しいオブジェクトのコレクションを返すための方法および更新されたオブジェクトを持つことになり、オブジェクトの
署名で構成されています
membershipObject:
id
start_date
end_date
uniqueId
id
とuniqueId
に最適ですコレクションにユニークでありますそれらを比較する。 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 3
がdownloadedCollection
から新しいです。
操作の複雑さを考慮して、これら2つのコレクションを比較する理想的なJavaの方法は何ですか? Java SDK 7
一般に、データを比較して何が変更されたかを判断することはありません。代わりに、何かを変更したときに管理システムに見たいものがわかるようにするために、「ダーティ」フラグを設定します。 – azurefrog
上記の操作を実行する必要がある場合は、メンバオブジェクトに対して適切な 'hashCode()'メソッドと対応する 'equals()'メソッドを実装できます。次に、新しくダウンロードされたリストの要素を含む 'HashSet'を作成し、次に参照リストの要素を' removeAll() 'します。どの要素が残っているかは、メンバーのequals()メソッドで定義されている意味で、参照リストとは異なるか、または異なっています。 –
@azurefrogこれはRESTサービスからダウンロードされているため、サービスがクライアント上の何が汚いかを知ることは実際には期待できません。クライアントが実際にサービスの最新データを使用するだけでなく、変更された内容を実際に知る必要があると仮定すると、JohnBollingerのソリューションは非常に優れています。 –