逐个字段比较两个对象并显示差异[关闭]

2024-01-09

我想逐个字段比较两个对象,即两个数据库行。 例如Object1[name="ABC", age=29, email="[email protected] /cdn-cgi/l/email-protection"]Object2[name="XYZ", age=29, email="[email protected] /cdn-cgi/l/email-protection"]

假设我想比较这两个对象并且我想要这样的输出

[{
 "fieldName" : "email",
 "OldObjectValue" : "[email protected] /cdn-cgi/l/email-protection",
 "NewObjectValue" : "[email protected] /cdn-cgi/l/email-protection"
},
{
 "fieldName" : "name",
 "OldObjectValue" : "ABC",
 "NewObjectValue" : "XYZ"
}]

这里的年龄是相同的,因此输出中不存在年龄字段。

如果可以通过使用反射执行通用方法来实现这一点,请提供一些代码。因为我还没有进行反思。 请帮忙。


根据您的要求,您可以按如下方式执行此操作。

您可以将两个数据库行分配给两个对象。例如:样本对象

public class SampleObject {

private String name;
private int age;
private String email;   

public SampleObject(String name, int age, String email) {
    this.name = name;
    this.age = age;
    this.email = email;
}
.
.

我想你的结果也会成为一个对象。例如:结果对象

public class ResultObject {

private String fieldName;
private String OldObjectValue;
private String NewObjectValue;
.
.

您可以在 SampleObject 中定义一个compareField 类型的方法

public List<ResultObject> compareFields(SampleObject object) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
    List<ResultObject> resultList = new ArrayList<ResultObject>();      
    Field[] fields = this.getClass().getDeclaredFields();

    for(Field field : fields){
        if(!field.get(this).equals(field.get(object))){
            ResultObject resultObject = new ResultObject();
            resultObject.setFieldName(field.getName());
            resultObject.setOldObjectValue(field.get(this).toString());
            resultObject.setNewObjectValue(field.get(object).toString());
            resultList.add(resultObject);
        }
    }
    return resultList;
}

然后你就可以让它工作了。

SampleObject object1 = new SampleObject("ABC", 29, "[email protected] /cdn-cgi/l/email-protection");
    SampleObject object2 = new SampleObject("XYZ", 29, "[email protected] /cdn-cgi/l/email-protection");

    List<ResultObject> resultList = object1.compareFields(object2);

Thanks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逐个字段比较两个对象并显示差异[关闭] 的相关文章

随机推荐

  • sed:替换行的一部分

    如何用 sed 替换一行的一部分 线路 DBSERVERNAME xxx 应替换为 DBSERVERNAME yyy 值 xxx 可能会有所不同 并且 dbservername 和该值之间有两个选项卡 该名称 值对是配置文件中的众多名称 值
  • github PR 显示所有过去的提交

    我们最近改变了工作流程 我们在 github 上的 新 存储库有 2 个分支 master and develop master不受直接推送保护 仅合并 PR develop是所有乐趣发生的地方 功能分支被合并回develop git me
  • 在 Angular 2 中使用第三方库 (parse.com)

    我正在学习 Angular 2 并且已经遵循 Egghead 的教程 但我对有关 Angular 的一切都很陌生 现在我想做一些更高级的事情并开始将 Parse com 与 A ngular 2 结合使用 通常我会通过以下方式将 parse
  • OPC 节点路径中的“ns=2;s=”有何意义?

    我注意到所有 OPC 标签 ID 的前缀都是ns 2 s 可能的 NodeId 值的一些示例是 ns 2 s AcquisitionTimeRemaining ns 2 s Status ns 2 s Time 我想知道这个前缀的意义是什么
  • 在 Flutter 中创建自定义小部件

    import package flutter material dart import package font awesome flutter font awesome flutter dart int weight 60 class R
  • 获取城市名称不以元音开头或不以元音结尾

    从 STATION 查询不以元音开头或不以元音结尾的 CITY 名称列表 您的结果不能包含重复项 输入格式 STATION表描述如下 我写了下面的查询 但它对我不起作用 有什么建议吗 select distinct city from st
  • GitHub - 查找与提交关联的拉取请求

    我正在尝试查找过去的拉取请求 以查看对特定问题做出了哪些评论 操作 我知道该文件和更改 因此我可以通过查看指责视图来访问引入该文件的提交 但是 我找不到一种方法来查看第一次将该提交推送到分支的拉取请求 有没有办法做到这一点 或者我是否必须沿
  • ./*/ 是可移植的吗?

    我经常使用 在 for 循环中 for d in do do something with dirs done 匹配当前工作目录中的所有非隐藏目录 但我不确定这是否是一种可移植的方法 我的系统上安装了 bash dash 和 ksh 并且它
  • MySQL 返回其中列包含集合中的任何但仅包含关键字的所有行

    有没有一种方法可以选择其中一列仅包含但任意数量的预定义值的行 我一直在使用这个 但它返回我的列至少包含一个值的任何行 我知道这正是它应该做的 但我正在寻找一种方法来仅选择关键字列中仅包含我的关键字的行 SELECT FROM product
  • 如何以角度拖动和重新排序内容

    我有5个不同的内容 我想将其拖动并重新排序在同一行中 我如何在角度 2 4 5 或 6 中执行此操作 如果有人知道 请帮助我执行此操作 堆栈闪电战 https stackblitz com edit angular cc9ztn file
  • 如何在C++中随机分配给向量?

    我是 C 新手 并且不断被告知要使用std vector代替new 我正在尝试实现此功能 其中我知道向量的大小并希望随机 而不是顺序 分配给它 然而 当运行这个时 我的程序终止且没有错误输出 所以我很困惑 vector
  • OpenCV DNN,从tensorflow导入.pb文件断言失败错误:函数“populateNet”中的scaleMat.type() == CV_32FC1

    我试图导入一个冻结的 并使用tensorflow python tools optimize for inference优化 pb optimized pb 文件使用 cv2 dnn readNetFromTensorflow optimi
  • 匿名聚合中不允许使用构造函数,结构中的字符串

    所以我在尝试创建和使用这个结构时遇到了错误 使用字符而不是字符串的结构有效 但我发现我需要能够存储许多字母 使用下面的这个小代码示例后 我收到此错误 错误 成员 std cxx11 string GraphNode c1 在匿名聚合字符串
  • BlackBerry - Unicode 文本显示

    我想在 BlackBerry 设备上的 j2me 应用程序中的 LabelField 中显示一些阿拉伯文本 假设设备上安装了阿拉伯字体 在本地化资源中 如果使用阿拉伯语言环境 则所有文本都以 Unicode 序列保存 但是 如果我明确使用这
  • 在 R 中将不同的预测方法传递给分层时间序列预测?

    我有一个分层时间序列 其底层序列都表现出间歇性需求 使用 Hyndman 的 HTS 包在层次结构内实现最佳组合似乎是有利的 使用 Kourentzes 的 MAPA 包进行间歇性需求的多重聚合预测似乎也是有利的 本质上 我想做类似的事情
  • 编写 html 文件,其中包含在特定工作表和行中打开 Excel 应用程序的链接

    我正在编写一个非常简单的 HTML 文件 其中包含一些表格 我试图获得一个单元格值 它基本上是一个链接 通过单击链接 我想在 Excel 应用程序中的特定工作表和行中打开文件 Notes 视窗环境 HTML由标准浏览器打开 该文件存在于本地
  • 如何通过c# mvc函数传递两个参数来调用存储过程

    当我需要传递单个参数时 我可以轻松完成 如下所示 public ProjectsModel GetProjectListBySearch int projectId try using context new Exo ADBEntities
  • 有没有办法从某些 HTML 元素中排除 MathJax 处理?

    有没有办法从某些 HTML 元素中排除 MathJax 处理 例如 如果我知道 a 中没有任何数学 div 有没有办法标记它以便 MathJax 处理器跳过它 div 就在这里 使用tex2jax ignoreCSS 类 div class
  • C# 构造函数有 2 个参数,但声称它没有带有两个参数的构造函数

    所以这是我的问题 我有一个名为 Login 的类 它将用于登录和创建新的登录帐户 我创建了一个不带参数的登录构造函数 public Login gloID 0 Username null Password null Note null Ac
  • 逐个字段比较两个对象并显示差异[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想逐个字段比较两个对象 即两个数据库行 例如Object1 name ABC age 29 emai