Ich vergleiche zwei Objekte, die eine Liste von Objekten enthalten, mit JaVers v3.0.0. Die Objekte, die ich vergleiche, unterscheiden sich im Inhalt der Liste, zum Beispiel wird ein Objekt aus der Liste entfernt.Javers: Identifizieren oder vermeiden Sie doppelte Diff Ergebnisse
Ich erhalte zwei Änderungsobjekte, wenn ich diesen Vergleich durchführe: ein ListChange und ein ObjectRemoved.
Wenn ich das Ergebnis präsentiere, muss ich sicherstellen, dass dieselbe Änderung nicht zweimal angezeigt wird. Es fällt mir schwer herauszufinden, wie ich diese Duplikate, die ich bekomme, entweder identifizieren oder vermeiden kann. Ich habe versucht, mit GlobalID, aber ich am Ende Parsing Strings, die nicht ganz sicher fühlen. Ich habe auch versucht, ListChange oder ObjectRemoved aus meiner Präsentation zu überspringen, aber das wirft Probleme auf, wenn ich auch eine ListChange einer Liste von Werten oder eine ObjectRemoved für ein Objekt habe, das nicht in einer Liste ist. Hier
@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;
}
}
ist die Ausgabe von Ausführen des Beispielcode oben:
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