Javers比较列表

时间:2016-05-23 15:08:25

标签: javers

我尝试通过解释容器更改(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比较器。

任何澄清都将不胜感激。

1 个答案:

答案 0 :(得分:0)

JaVers有两种比较列表的算法:Simple和Levenshtein 见http://javers.org/documentation/diff-configuration/#list-algorithms

默认情况下使用简单算法,主要是因为它的速度。 Levenshtein更聪明,但对于非常大的列表来说可能会很慢。来自JaVers doc:

SIMPLE算法为移位的元素生成更改(如果在列表中间插入或删除元素)。相反,即使在元素移位的情况下,Levenshtein算法也会计算短而清晰的变化列表。它并不关心转移元素的索引更改。

我的建议,试试Levenshtein距离算法。