開源Java物件比較器java-object-diff實戰講解
簡介
java-object-diff 是一個簡單但功能強大的尋找Java物件之間的差異的庫。這需要對比兩個物件,並能生成一個樹狀結構表示物件和他們的子物件之間的差異。然後,這個樹狀結構可以通過提取更多資訊或更改應用到底層的資料結構。
- 可以與你能想到的幾乎任何型別的物件和任意深度巢狀
- 發現兩個物件之間的差異
- 告訴你一切變化檢測結果
- 返回遍歷樹形結構形狀的差異
- 提供讀寫訪問底層物件,讓你不僅要提取改變的值,而且可以應用差異作為一個補丁。
- 不需要改變現有的類(在大多數情況下)
- 提供了一個非常靈活的配置API來定製您的一切需要
- 微小簡單但非常強大的API
- 檢測並處理物件圖中的迴圈引用
- 除了SLF4J沒有其他執行依賴
- 與Java1.5及以上相容
使用方法
Using with Maven
<dependency>
<groupId>de.danielbechler</groupId>
<artifactId>java-object-diff</artifactId>
<version>0.95</version>
</dependency>
Using with Gradle
compile 'de.danielbechler:java-object-diff:0.95'
實戰
public class JavaObjectDiff {
public static void main(String[] args) {
Map<String, String> working = Collections.singletonMap("item", "foo");
Map<String, String> base = Collections.singletonMap("item", "bar");
DiffNode diff = ObjectDifferBuilder.buildDefault().compare(working, base);
System.out.println(diff.hasChanges());
System.out.println(diff.childCount() == 1);
NodePath itemPath = NodePath.startBuilding().mapKey("item").build();
System.out.println(diff.getChild(itemPath).getState() == DiffNode.State.CHANGED);
/**
* method1 Traversal
*/
diff.visit(new DiffNode.Visitor() {
@Override
public void node(DiffNode node, Visit visit)
{
System.out.println(node.getPath() + " => " + node.getState());
}
});
/**
* method2 Reading Values
*/
diff.visit(new DiffNode.Visitor() {
@Override
public void node(DiffNode node, Visit visit)
{
final Object baseValue = node.canonicalGet(base);
final Object workingValue = node.canonicalGet(working);
final String message = node.getPath() + " changed from " +
baseValue + " to " + workingValue;
System.out.println(message);
}
});
}
輸出結果
true
true
true
/ => CHANGED
/{item} => CHANGED
/ changed from {item=bar} to {item=foo}
/{item} changed from bar to foo
原理說明
根據被比較物件的內部各層型別的equals方法進行比較,所以可以通過override來定義比較規則!
參考
官網:java-object-diff
Github: Github
相關文章
- Java 比較器Java
- 哪些開源雲工具比較實用呢?
- 開源加密解密庫比較加密解密
- Java物件之間的比較之equals和==Java物件
- PHP物件的比較PHP物件
- 不同Java垃圾回收器的比較Java
- 五種開源協議的比較協議
- 常用的Java開發工具比較Java
- Java 8 比較器:如何對 List 排序Java排序
- 不同的Java垃圾回收器的比較Java
- 開源雲平臺的分析與比較
- JAVA字串比較Java字串
- 【Java】Collection.sort以及比較器ComparatorJava
- Java集合詳解3:Iterator,fail-fast機制與比較器JavaAIAST
- js 防抖實戰講解JS
- 目前哪些開源雲監控工具比較好用!
- 四種開源門戶portal軟體比較
- TC中如何新增物件及比較物件物件
- java比較日期大小Java
- Java和JavaSciprt比較Java
- java--BEAN比較JavaBean
- [java之list比較]Java
- JAVA IO效能比較Java
- 前端動效講解與實戰前端
- Prometheus PromQL 講解與實戰操作PrometheusMQ
- 對mysql explain講的比較清楚的MySqlAI
- 廣州牽引力講述java開發師怎樣規劃職業發展比較好?Java
- js物件陣列Date的比較JS物件陣列
- 盤點 7 月份比較火的開源專案
- asp.net core 比較好的開源專案ASP.NET
- 常見的五種開源協議的比較協議
- 比較開源日誌:Logstash、FluentD 和 Fluent Bit
- [C++] 自定義C++比較器比較大小C++
- 物件包裝器類之間的比較用equals()而不是==物件
- Java Integer型別比較Java型別
- Java 兩個日期比較Java
- java開發的第十五個部落格(Collections工具類和比較器)Java
- JAVA中的Comparable介面和自定義比較器Java