Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌套list等場景

實體字段比較器(對比兩組對象找出發生變化的字段工具類開發)

支持枚舉映射
支持時間
支持顯示對應字段中文描述
支持嵌套list等場景

下載地址
Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌套list等場景-超越其他工具.rar

最新版本更新
https://code.jiangjiesheng.cn/article/366?from=csdn

package cn.jiangjiesheng.annoation.entitycomparator.demo;import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizentity.SubTask;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizentity.Task;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum1Priority;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum2Status;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum3Type;
import cn.jiangjiesheng.service.impl.common.entitycomparator.impl.EntityComparator;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** 對比兩組對象找出發生變化的字段工具類 測試驗證*/
public class EntityComparatorDemo {public static void main(String[] args) throws Exception {String dateStr = "2025-03-04 12";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH");// 解析字符串為LocalDateTime對象LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatter);// 如果需要轉換為舊的Date類型Date date = java.sql.Timestamp.valueOf(localDateTime);SubTask oldSubTask = new SubTask("SubTaskOld", date, Enum2Status.PENDING, "2025-01-01");SubTask newSubTask = new SubTask("SubTaskNew", DateUtil.beginOfWeek(new Date()), Enum2Status.COMPLETED, "2025-01-02");List<SubTask> oldSubTasks = new ArrayList<>();oldSubTasks.add(oldSubTask);List<SubTask> newSubTasks = new ArrayList<>();newSubTasks.add(newSubTask);//再來一組,老的是空newSubTasks.add(newSubTask);Task oldTask = new Task(Enum1Priority.LOW, Enum2Status.PENDING, Enum3Type.TYPE_A.getCode(), oldSubTasks, oldSubTask, "2025-01-01");Task newTask = new Task(Enum1Priority.HIGH, Enum2Status.COMPLETED, Enum3Type.TYPE_B.getCode(), newSubTasks, newSubTask, "2025-01-02");List<EntityComparator.ChangeInfo> changes = EntityComparator.compareEntities(oldTask, newTask);// for (ChangeInfo change : changes) {//     System.out.println("Field: " + change.getFieldName());//     System.out.println("Description: " + change.getFieldDesc());//     System.out.println("Old Value: " + change.getOldValue());//     System.out.println("New Value: " + change.getNewValue());//     System.out.println();// }//這個保持了順序,但是json結構混亂System.out.println("保持了順序,但是json結構混亂:");System.out.println(EntityComparator.ChangeInfo.toOrderedJson(changes));System.out.println();// 這個未保持順序,但是json結構清晰System.out.println("未保持順序,但是json結構清晰:");System.err.println(JSONUtil.toJsonPrettyStr(changes));}
}

對比結果示例:

[ {"fieldDesc" : "任務優先級","fieldName" : "enum1Priority","newValue" : "高優先級","oldValue" : "低優先級"
},{"fieldDesc" : "任務狀態","fieldName" : "enum2Status","newValue" : "已完成","oldValue" : "待處理"
},{"fieldDesc" : "任務類型","fieldName" : "taskType","newValue" : "類型B","oldValue" : "類型A"
},{"child" : [
[ {"fieldName" : "subTasks[0].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[0].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[0].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[0].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"} ],
[ {"fieldName" : "subTasks[1].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[1].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[1].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[1].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"} ],
[ {"fieldName" : "subTasks[2].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[2].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[2].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[2].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"}]],"fieldDesc" : "子任務列表","fieldName" : "subTasks"
},{"fieldDesc" : "子任務名稱","fieldName" : "subTask.name","newValue" : "SubTaskNew","oldValue" : "SubTaskOld"
},{"fieldDesc" : "時間日期類型","fieldName" : "subTask.dateTime","newValue" : "2025-04-07 00","oldValue" : "2025-03-04 12"
},{"fieldDesc" : "子任務狀態","fieldName" : "subTask.enum2Status","newValue" : "已完成","oldValue" : "待處理"
},{"fieldDesc" : "創建時間","fieldName" : "subTask.createdAt","newValue" : "2025-01-02","oldValue" : "2025-01-01"
},{"fieldDesc" : "創建時間","fieldName" : "createdAt","newValue" : "2025-01-02","oldValue" : "2025-01-01"
} ]

最新版本更新
https://code.jiangjiesheng.cn/article/366?from=csdn

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75246.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75246.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

15. git push

基本概述 git push 的作用是&#xff1a;把本地分支的提交推送到遠程倉庫。推送分支需要滿足快進規則&#xff08;Fast-Forward&#xff09;&#xff0c;即遠程分支的最新提交必須是本地分支的直接祖先&#xff0c;這個是通過哈希值值進行判斷的。 基本用法 1.完整格式 git…

訓練數據清洗(文本/音頻/視頻)

多數據格式的清洗方法 以下是針對多數據格式清洗方法的系統性總結&#xff0c;結合Python代碼示例&#xff1a; 一、數據清洗方法總覽&#xff08;表格對比&#xff09; 數據類型核心挑戰關鍵步驟常用Python工具文本非結構化噪聲去噪→分詞→標準化→向量化NLTK, SpaCy, Jie…

Python標準庫json完全指南:高效處理JSON數據

一、json庫概述 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式&#xff0c;Python的json模塊提供了JSON數據的編碼和解碼功能。該模塊可以將Python對象轉換為JSON字符串&#xff08;序列化&#xff09;&#xff0c;也可以將JSON字符串轉換為Python對象&#xf…

微軟推出首款量子計算芯片Majorana 1

全球首款拓撲架構量子芯片問世&#xff0c;2025年2月20日&#xff0c;經過近20年研究&#xff0c;微軟推出了首款量子計算芯片Majorana 1&#xff0c;其宣傳視頻如本文末尾所示。 微軟表示&#xff0c;開發Majorana 1需要創造一種全新的物質狀態&#xff0c;即所謂的“拓撲體”…

【QT】QT中的文件IO

QT中的文件IO 一、有關文件IO的類二、步驟1、定義QFile的對象,與要讀寫的文件綁定在一起2、打開文件3、讀寫文件1&#xff09;讀取文件2&#xff09;寫入文件 4、關閉文件5、示例代碼&#xff1a; 三、QString和QByteArray之間的轉換1、方法2、示例代碼&#xff1a; 四、QFileI…

Nginx 499 錯誤的原因及解決方法

Nginx 499 錯誤的原因及解決方法 原因 客戶端超時&#xff1a; 客戶端在等待服務器響應時超時&#xff0c;導致連接被關閉。 解決方法&#xff1a;優化服務端響應時間&#xff0c;或調大客戶端的連接超時時間。 服務端響應過慢&#xff1a; 后端服務處理請求時間過長。 解決方法…

Smith-Waterman 算法(C++實現)

本文實現Smith-Waterman 算法案例&#xff0c;用于局部序列比對。該算法是生物信息學中用于尋找兩個 DNA、RNA 或蛋白質序列之間最優局部比對的經典算法&#xff0c;廣泛應用于序列相似性分析和功能預測。 問題描述 給定兩個生物序列 seq1 和 seq2&#xff0c;如何找到它們的最…

安卓玩機工具-----安卓機型通用 無損備份與恢復數據的工具BackupToolkit 操作過程

常規安卓機型數據備份與恢復的方法及工具 安卓設備的數據備份與恢復是保護個人數據的重要手段之一。以下是幾種常用的方法和工具&#xff1a; 方法一&#xff1a;利用內置的云服務進行備份 許多安卓設備提供了內置的云服務&#xff0c;例如華為手機可以通過“華為云空間”來…

oracle 動態性能視圖

Oracle 數據庫中的 V$SQLAREA 是一個動態性能視圖&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于記錄共享池&#xff08;Shared Pool&#xff09;中所有 SQL 語句的統計信息。每個 SQL 語句在共享池中存儲為一個游標&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上線全文索引功能,讓數據檢索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企業級全文索引功能。該版本在中文分詞、查詢效率及混合檢索能力上進行了全面提升。經過自然語言模式和布爾模式在不同場景下的對比測試&#xff0c;OceanBase 的全文索引性能明顯優于 MySQL。 點擊下載 OceanBase 社區版…

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置

海康攝像頭AI報警、移動偵測報警等通過Ehome/ISUP協議上報到LiveNVR流媒體平臺時如何進行報警配置 1、LiveNVR介紹2、如何配置海康攝像頭、錄像機通過Ehome/ISUP注冊到LiveNVR設備 EHOME 接入配置示例設備 ISUP 接入配置示例直播流接入類型 海康ISUP海康 ISUP 設備ID啟用保存 3…

golang gmp模型分析

思維導圖&#xff1a; 1. 發展過程 思維導圖&#xff1a; 在單機時代是沒有多線程、多進程、協程這些概念的。早期的操作系統都是順序執行 單進程的缺點有&#xff1a; 單一執行流程、計算機只能一個任務一個任務進行處理進程阻塞所帶來的CPU時間的浪費 處于對CPU資源的利用&…

Redis基礎指令(Windows)

1.cmd命令行啟動redis 直接cmd打開整個文件 1.1.啟動server 輸入指令&#xff1a; redis-server.exe redis.windows.conf 會進入serve端 1.2.啟動客戶端 &#xff01;&#xff01;重新打開一個cmd&#xff0c;方法和上面一樣&#xff01;&#xff01; 之后輸入 redis-…

vue:前端預覽 / chrome瀏覽器設置 / <iframe> 方法預覽 doc、pdf / vue-pdf 預覽pdf

一、本文目標 <iframe> 方法預覽 pdf 、word vue-pdf 預覽pdf 二、<iframe> 方法 2.1、iframe 方法預覽需要 瀏覽器 設置為&#xff1a; chrome&#xff1a;設置-隱私設置和安全性-網站設置-更多內容設置-PDF文檔 瀏覽器訪問&#xff1a; chrome://settings/co…

【C++游戲引擎開發】第11篇:GLFW、GLAD環境搭建與第一個三角形渲染

一、GLFW、GLAD安裝 1.1 vcpkg安裝相關庫 跨平臺C++包管理利器vcpkg完全指南 # 安裝GLFW vcpkg install glfw3# 安裝GLAD vcpkg install glad1.2 初始測試代碼 #include <glad/glad.h> #include <GLFW/glfw3.h> int main() {glfwInit();GLFWwindow* window = g…

西門子S7-1500與S7-200SMART通訊全攻略:從基礎配置到遠程IO集成

以下是一篇關于西門子S7-1500與S7-200SMART通訊的詳細教程&#xff0c;包含遠程IO模塊的配置方法&#xff0c;適用于工業自動化場景的博客發布&#xff1a; 西門子S7-1500與S7-200SMART通訊全攻略&#xff1a;從基礎配置到遠程IO集成 一、硬件與軟件準備 硬件設備 主站&#x…

前端性能優化的全方位方案【待進一步結合項目】

以下是前端性能優化的全方位方案,結合代碼配置和最佳實踐,涵蓋從代碼編寫到部署的全流程優化: 一、代碼層面優化 1. HTML結構優化 <!-- 語義化標簽減少嵌套 --> <header><nav>...</nav> </header> <main><article>...</arti…

前端快速入門——JavaScript變量、控制語句

1.JavaScript 定義 JavaScript 簡稱 JS. JavaScript 是一種輕量級、解釋型、面向對象的腳本語言。它主要被設計用于在網頁上實現動態效果&#xff0c;增加用戶與網頁的交互性。 作為一種客戶端腳本語言&#xff0c;JavaScript 可以直接嵌入 HTML&#xff0c;并在瀏覽器中執行。…

GitHub 趨勢日報 (2025年04月01日)

GitHub 趨勢日報 (2025年04月01日) 本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星語言1punkpeye/awesome-mcp-serversA collection of MCP servers.? 3280未指定2th-ch/youtube-musicYouTu…

windows手動添加鼠標右鍵彈窗快捷方式

此處以添加Git Bash Here為例 一.操作步驟 按 Win R 鍵打開 運行 對話框&#xff0c;輸入 regedit&#xff0c;并按下回車&#xff0c;打開注冊表編輯器。 導航到 HKEY_CLASSES_ROOT\Directory\Background\shell。 右鍵單擊 shell&#xff0c;選擇 新建 → 項&#xff0c;并…