Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Javers按顺序比较列表_Java_List_Java 8_Compare_Javers - Fatal编程技术网

Java Javers按顺序比较列表

Java Javers按顺序比较列表,java,list,java-8,compare,javers,Java,List,Java 8,Compare,Javers,我有两个类似这样的java类: public class FooA { private List<FooB> fooB; } public class FooB { private Integer id; private String name; private double num; } 它给了我这个区别: Diff: * new object: com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32 * object r

我有两个类似这样的java类:

public class FooA {
  private List<FooB> fooB;
}

public class FooB {
  private Integer id;
  private String name;
  private double num;
}
它给了我这个区别:

Diff:
* new object: com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32
* object removed: com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620
* changes on com.FooA/ :
  - 'fooB' collection changes :
    . 'com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620' removed
    . 'com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32' added
我甚至试着在FooB上添加一个Id,就像我在很多帖子中读到的那样。现在我的食物看起来像这样:

public class FooB {
  @Id
  private Integer id;
  private String name;
  private double num;
}
但现在当我比较时,我得到了:

Diff:
* changes on com.FooB/1 :
  - 'name' changed from 'old' to 'new'
它注册为值更改,而不是集合更改。我希望差异是这样的:

Diff:
* changes on com.FooA/#fooB/1 :
  - 'fooB' collection changes :
    . 'name' changed from 'old' to 'new'

我做错了什么?

使用
Javers
版本
5.2.4

public class FooA {
    private List<FooB> fooB;

    public FooA(List<FooB> fooB) {
        this.fooB = fooB;
    }
}

public class FooB {
    private Integer id;
    private String name;
    private double num;

    public FooB(Integer id, String name, double num) {
        this.id = id;
        this.name = name;
        this.num = num;
    }
}

void test() {
    FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
    FooA new1 = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));

    Javers javers = JaversBuilder.javers()
            .withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
            .build();

    System.out.println(
            javers.compare(old, new1)
    );
}
这几乎和你想要的一样


FooA/fooB/0.name
->FooA具有数组fooB,并且第一个(索引0)name属性已更改

,但您更改的是对象,而不是集合,那么您为什么期望集合更改?
public class FooA {
    private List<FooB> fooB;

    public FooA(List<FooB> fooB) {
        this.fooB = fooB;
    }
}

public class FooB {
    private Integer id;
    private String name;
    private double num;

    public FooB(Integer id, String name, double num) {
        this.id = id;
        this.name = name;
        this.num = num;
    }
}

void test() {
    FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
    FooA new1 = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));

    Javers javers = JaversBuilder.javers()
            .withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
            .build();

    System.out.println(
            javers.compare(old, new1)
    );
}
Diff:
* changes on pl.javers.JaversTest$FooA/ :
  - 'fooB/0.name' changed from 'old' to 'new'