当前位置: 首页 > 知识库问答 >
问题:

Javers比较不同顺序的列表

秦天宇
2023-03-14

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

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"
          }
        }
      ]
    }
  ]
}

共有1个答案

薄欣怿
2023-03-14

首先,您必须选择一个属性作为id-property。如果有两个@id属性,JaVers选择其中一个作为Id-property(其中一个未定义)。

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

 类似资料:
  • 我有一个关于列表比较器的问题。我有一个带有表格的网页应用程序。我可以在这个表格中编辑数据,也可以删除行。当我编辑数据时,标准比较器工作正常,但当我删除行时,我有问题。这个问题很常见(我想),当我删除一行时,javers比较旧列表和现在的列表时,看起来是这样的:旧列表有两个对象,现在列表有一个对象(我删除了第一个),现在javers不知道哪个对象被删除了,他比较旧列表中的第一个对象和新列表中的第二个

  • null 但是,如果清单2为应该返回false(因为字符串d出现的顺序混乱)

  • 我正在尝试比较自定义对象的列表。我设置了LEVENSHTEIN_DISTANCE并创建了自定义比较器。对象之间唯一的区别是列表中值的顺序。我希望“没有变化”,但我得到了listchange。结果和示例如下。我做错了什么? 非常感谢和问候,安德烈

  • 我想检测到鲍勃在以下情况下将城市从伦敦改为巴黎:

  • 嗨,我是贾维斯的新手。 我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较。 我的实体:- 包装com.devyansh.entity; 进口java.util.清单; 导入组织。贾维斯。果心元模型。注释。实体 下面我注册了新的比较器:- 我的比较器实现:- 问题领域:- 每当我尝试使用以下行进行比较时:- Diff Diff=标枪。比较(new Ent(“aaa”,new

  • “StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”