【问题标题】:Compare two POJO objects in Java and display the difference比较Java中的两个POJO对象并显示差异
【发布时间】:2018-07-31 07:31:08
【问题描述】:

我需要比较两个 Pojo 对象并显示结果。

我的方案是将 Db 值与输入文件进行比较。为此,我创建了一个 POJO 类。

POJO 类

public class BuySellTO
{
String fundFamily;

public String getFundFamily() {
    return fundFamily;
}

public void setFundFamily(String fundFamily) {
    this.fundFamily = fundFamily;
}

读取数据库值的方法

public BuySellTO readDB(String x) throws Exception {
    try {
        String sqlQuery;
        BuySellTO bsDb = new BuySellTO();
        if(x.isEmpty() || StringUtils.isBlank(x))
           sqlQuery = "----sql query----";
        else
            sqlQuery = "----sql query----";
        ResultSet result = sqlDb.executeSqlQuery(sqlQuery);
        while (result.next()) {
            bsDb.setFundFamily(result.getString(1).trim());
          }
        return bsDb;
    } catch (Exception e) {
        e.printStackTrace();
        throw e;
    }

在输入文件中读取值的方法

public BuySellTO readFundDetailsInFile(String a, String b) throws Exception
{
    try
    {
        BuySellTO inputTO = new BuySellTO();
        String[] data = readBuySellFile(a, b);
        if (data != null) {
            inputTO.setFundFamily(data[0].trim());
        }
        else
            System.out.println("Record does not exist in the File to store in Array..!!!");
        return inputTO;
    }
    catch(Exception e)
    {
        e.printStackTrace();
        throw e;
    }
}

在这里,我将有“n”个字段。所以我需要一一比较并打印结果。

我可以使用下面的方法直接比较。

比较

public static boolean comparePOJO(Object obj1, Object obj2) {
    return new Gson().toJson(obj1).equals(new Gson().toJson(obj2));
}

请提供您的想法以单独比较每个对象。

【问题讨论】:

  • 这取决于您要比较的内容。如果您只想知道两个对象是否相等,请覆盖equals 方法。如果您想找到差异,可以使用反射来访问所有字段。

标签: java arrays object pojo


【解决方案1】:

你试过用equals方法吗?

您需要在 BySellTO 类中覆盖它们。

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof BuySellTO)) return false;

        BuySellTO buySellTO = (BuySellTO) o;

        return fundFamily != null ? fundFamily.equals(buySellTO.fundFamily) : buySellTO.fundFamily == null;
    }

    @Override
    public int hashCode() {
        return fundFamily != null ? fundFamily.hashCode() : 0;
    }

然后

public static boolean comparePOJO(Object obj1, Object obj2) {
    return obj1.equals(obj2);
}

【讨论】:

  • 如果我需要比较 10 个字段。如何实现这一点..??
  • 如果你使用eclipse你可以自动生成equalshashcode。如果要覆盖 equals,请记住覆盖 hashcode。节省了很多痛苦。
  • @MohanKumar 您需要在 POJO 类中覆盖 equals。只需使用 IDE 自动生成的一个即可。
  • 嗨,我相信在您从 DB 方法中读取的值中,您已经覆盖了“bsDb.setFundFamily(...)”。可以尝试使用 readFundDetailsInFile(a,b) 函数返回数据,并在'Reading values in DB' while/for循环中进行比较...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 2017-05-10
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多