Java Javers比较不同顺序的列表

Java Javers比较不同顺序的列表,java,list,compare,javers,Java,List,Compare,Javers,我有两个数据相同但顺序不同的列表 为什么JaverscompareCollections方法会看到Levenshtein距离的两个变化(一个值被删除,一个值被添加) 也许Javers不允许多个字段带有@Id注释 代码: class A { @Id private String a; @Id private String b; public A() { } public A(String a, String b) { th

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

为什么Javers
compareCollections
方法会看到Levenshtein距离的两个变化(一个值被删除,一个值被添加)

也许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属性(哪一个是未定义的)


其次,两种比较列表的算法(
LEVENSHTEIN
SIMPLE
)都注意排序。列表是有序的集合。如果您不关心对使用集进行排序。

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


其次,两种比较列表的算法(
LEVENSHTEIN
SIMPLE
)都注意排序。列表是有序的集合。如果您不关心使用集的排序。

您是否跟踪Javers代码以查看其功能?不,我没有看到Javers源代码。您跟踪Javers代码以查看其功能吗?不,我没有看到Javers源代码。旧帖子。。。但是如果我不关心订购,我关心复制品呢?那么你需要袋子,但目前javersOld post不支持袋子。。。但是如果我不在乎订购,我在乎复制品呢?那么你需要包,但目前javers不支持包