Я сравниваю два объекта, содержащие список объектов, используя JaVers v3.0.0. Объекты, которые я сравниваю, различаются по содержимому списка, например, объект удаляется из списка.javers: Определить или избежать дублирования результатов diff
Я получаю два объекта изменения, когда выполняю это сравнение: один 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:'[email protected]']}
java.lang.AssertionError:
Expected :1
Actual :2