0

我试图通过解释容器更改(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']

这似乎忽略了在索引 (4) 处添加了“entity5”(即不是 3)并且“entity4”像前面的示例一样移动的事实。

更新:我在上面的例子中使用了 Levenshtein 比较器。

任何澄清将不胜感激。

4

1 回答 1

1

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

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

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

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

于 2016-05-24T07:24:53.373 回答