我正在使用 JaVers v3.0.0 比较包含对象列表的两个对象。我正在比较的对象在列表的内容上有所不同,例如从列表中删除了一个对象。
执行此比较时,我得到两个更改对象:一个 ListChange 和一个 ObjectRemoved。
在呈现结果时,我需要确保相同的更改不会出现两次。我很难弄清楚如何识别或避免我得到的这些重复。我曾尝试使用 GlobalID,但最终解析的字符串并不完全安全。我也尝试过从演示文稿中跳过 ListChange 或 ObjectRemoved,但是当我也有值列表的 ListChange 或不在列表中的对象的 ObjectRemoved 时,就会出现问题。
@Test
public void javersDuplicateDiffResult() {
MyMainObj objA = new MyMainObj(Arrays.asList(new MyListedObj("hello"), new MyListedObj("world")));
MyMainObj objB = new MyMainObj(Arrays.asList(new MyListedObj("hello")));
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE)
.build();
Diff res = javers.compare(objA, objB);
System.out.println(res);
Assert.assertEquals(1, res.getChanges().size());
}
class MyMainObj {
private List<MyListedObj> theObjectList;
public MyMainObj(List<MyListedObj> anObjectList) {
this.theObjectList = anObjectList;
}
}
class MyListedObj {
private String theText;
public MyListedObj(String aText) {
this.theText = aText;
}
}
以下是运行上述示例代码的输出:
Diff:
1. ObjectRemoved{globalId:'org.example.TestJavers$MyMainObj/#theObjectList/1'}
2. ListChange{globalId:'org.example.TestJavers$MyMainObj/', property:'theObjectList', containerChanges:[(1).removed:'org.example.TestJavers$MyListedObj@2aece37d']}
java.lang.AssertionError:
Expected :1
Actual :2