我尝试通过解释容器更改(v1.6.0)将两个实体列表上的差异转换为更易读的格式。
如果我有实体清单(listBefore):
entity1
entity2
entity3
entity4
我重新排序列表(listAfter)
entity1
entity4
entity2
entity3
使用
比较这些列表的结果Javers.compareCollections( listBefore, listAfter, Entity.class )
是:
containerChanges:[(3).removed:'entity4', (1).added:'entity4']
由此可以推断出:entity4从索引3移动到索引1。
如果我重复相同的比较,这次将新项目添加到第二个列表:
entity1
entity4
entity2
entity3
entity5
比较的结果是:
containerChanges:[(3).'entity4'>>'entity5', (1).added:'entity4']
这似乎错过了' entity5'在索引(4)(即不是3)和' entity4'如上例所示移动。
更新:我在上面的例子中使用了Levenshtein比较器。
任何澄清都将不胜感激。
答案 0 :(得分:0)
JaVers有两种比较列表的算法:Simple和Levenshtein 见http://javers.org/documentation/diff-configuration/#list-algorithms
默认情况下使用简单算法,主要是因为它的速度。 Levenshtein更聪明,但对于非常大的列表来说可能会很慢。来自JaVers doc:
SIMPLE算法为移位的元素生成更改(如果在列表中间插入或删除元素)。相反,即使在元素移位的情况下,Levenshtein算法也会计算短而清晰的变化列表。它并不关心转移元素的索引更改。
我的建议,试试Levenshtein距离算法。