私は、コンテナの変更(v1.6.0)を解釈することによって、エンティティの2つのリストのdiffをより人間が読める形式に変換しようとしています。Javersリストの比較
私は、エンティティのリスト(listBefore)がある場合:
entity1
entity2
entity3
entity4
を、私は(listAfter)
entity1
entity4
entity2
entity3
使用してこれらのリストを比較した結果リストを並べ替える
Javers.compareCollections(listBefore, listAfter, Entity.class)
は:
このことから私はそれを推測することができますentity4は、私は同様の比較を繰り返した場合は、この時間が第2のリストに新しい項目を追加する1.
インデックスにインデックス3から移動:
entity1
entity4
entity2
entity3
entity5
比較の結果は次のとおりです。
containerChanges:[(3).'entity4'>>'entity5', (1).added:'entity4']
これは「entity5」のインデックスに追加されたという事実を見逃しているようだ(4)(すなわちnot 3)と 'entity4'は前の例のように移動しました。
更新:上記の例では、Levenshteinコンパレータを使用しています。
任意の明確化が認められるであろう。
申し訳ありませんが、私は明らかにすべきです - 私はLevenshtein距離アルゴリズムを使用しています。そのため、最初の例では、entity2とentity3の移動を無視しています。新しい要素をリストに追加すると、結果が正しく表示されません(上記の2番目の例)。 – stacktrace
現在、私は2つのリストの中で最も長くなっているサブシーケンスを使ってカスタム比較を行っています。サブシーケンス(または追加または削除)の一部ではない要素は、あるインデックスから別のインデックスへの移動と見なされます。問題は、フレームワークが「並べ替え」変更タイプをサポートしていないため、通常の変更処理の外でこれを処理する必要があることです。 – stacktrace
JaVersリスト比較アルゴリズムでは、移動の概念はありません。移動後、あなたが言及したように、ValueAddedとValueRemovedという2つの変更が報告されます。 –