使用Javers比较包含地图的对象

时间:2017-04-24 05:56:46

标签: java javers

当我真的想轻松比较两个对象时,我发现了一个名为Javers的库。对于大多数情况,这确实很好,例如比较对象中的值更改,也适用于列表。但如果有两个包含地图的对象,那么如何捕获这些变化呢?例如,我有一个带有地图的下一课,

public class Test {
   private Map<String,Object> map = new HashMap();
   //some others fields
   //getters and setters
}

现在,如果我的对象具有以下值:

Test test1 = new Test();
Map<String,Object> map1 = new HashMap();
map1.put("one",1);
map1.put("two",2);
test1.setMap(map1);
Test test2 = new Test();
Map<String,Object> map2 = new HashMap();
map2.put("one",2);
map2.put("two",1);
test2.setMap(map2);
Javers javers = JaversBuilder.javers().build();
javers.compare(test1,test2);//?

这并没有给我在地图中完成的更改。我将如何捕获它?

1 个答案:

答案 0 :(得分:1)

捕获您需要处理compare方法返回的diff对象所需的更改。例如,只打印更改:

Diff diff = javers.compare(test1,test2);
        diff.getChanges().forEach(change -> System.out.println(change.toString()));

更多信息可以在javers的文档中找到: http://javers.org/documentation/diff-examples/

在javadoc中: http://javers.org/javadoc_3.x/org/javers/core/diff/Diff.html