gpt4 book ai didi

java - Javers 比较不同顺序的列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:40 37 4
gpt4 key购买 nike

我有两个具有相同数据但顺序不同的列表。

为什么 Javers compareCollections 方法会看到 Levenshtein 距离发生两个变化(一个 ValueRemoved 和一个 ValueAdded)?

也许 Javers 不允许使用 @Id 注释的多个字段?

代码:

class A {
@Id
private String a;
@Id
private String b;

public A() {
}

public A(String a, String b) {
this.a = a;
this.b = b;
}

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}
}

@Test
public void testJavers() {
List<A> oldList = Arrays.asList(
new A("a1", "b1"),
new A("a2", "b2"));
List<A> newList = Arrays.asList(
new A("a2", "b2"),
new A("a1", "b1"));
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE)
.build();
Diff diff = javers.compareCollections(oldList, newList, A.class);
System.out.println(javers.getJsonConverter().toJson(diff));
}

结果:

{
"changes": [
{
"changeType": "ListChange",
"globalId": {
"valueObject": "org.javers.core.graph.LiveGraphFactory$ListWrapper"
},
"property": "list",
"elementChanges": [
{
"elementChangeType": "ValueRemoved",
"index": 1,
"value": {
"a": "a2",
"b": "b2"
}
},
{
"elementChangeType": "ValueAdded",
"index": 0,
"value": {
"a": "a2",
"b": "b2"
}
}
]
}
]
}

最佳答案

首先,您必须选择一个属性作为 Id 属性。如果您有两个带有 @Id 的属性,JaVers 会选择其中之一作为 Id 属性(哪一个未定义)。

其次,两种比较列表的算法(LEVENSHTEINSIMPLE)都注重排序。列表是有序的集合。如果您不关心订购,请使用套装。

关于java - Javers 比较不同顺序的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822956/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com