gpt4 book ai didi

java - 尝试比较两个对象并提取包含它们差异的第三个对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:30 27 4
gpt4 key购买 nike

我有两个域对象,类型相同。它们包含枚举、原始数组和其他对象,并且在 Heirarchy 中也有一个列表。

我需要一些东西来提取第三个相同类型的对象,它只包含它们的差异,几乎就像一个只包含它们的变化的面具。任何未更改的内容都设置为空。

一切都指向 Apache BeanUtils,但我找不到我要找的东西,有什么建议吗?

编辑#1澄清的例子:如果 obj1 是原始版本,而 obj2 是更新版本。然后,如果 obj1.value 等于 obj2.value,则 obj3.value 将为空。如果 obj1.value 不等于 obj2.value 则 obj3.value 将被设置为 obj2.value 的值

编辑#2理想情况下,它应该是抽象的,并且不需要知道正在运行比较的对象的类型。因为这可以在未来用于不同的对象。如果其中一个更新值设置为 null,则可以将其忽略,就好像它不是更改一样。

最佳答案

你的问题对我来说很有趣。我非常努力地寻找你的目标,并找到了一个小图书馆来实现它。这个库在 google code它的名字是jettison .此实用程序有一个名为 Diff4J 的主类有一个方法 diffs方法并通过它比较两个对象并找出不同之处。

然后我为您的目标编写如下代码:

首先定义一个Model Object名字Bean :

public class Bean
{
private String name;
private String family;

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public String getFamily()
{
return family;
}

public void setFamily(String family)
{
this.family = family;
}

public Bean()
{
}

public Bean(String name, String family )
{
this.name = name;
this.family = family;
}
}

然后编写一个测试类如下:

public static void main(String[] args) throws IllegalAccessException, 
InvocationTargetException
{
Bean bean_1 = new Bean("Sara", "clooney");
Bean bean_2 = new Bean("Sally", "clooney");

Diff4J comparator = new Diff4J();
Collection<ChangeInfo> diffs = comparator.diff(bean_1, bean_2);

Bean final_result = new Bean();

for(ChangeInfo c : diffs)
{
String filedName = c.getFieldName();
Object to_value = c.getTo();
Object from_value = c.getFrom();

BeanUtilsBean.getInstance().setProperty(final_result, filedName, to_value);
}

System.out.println(final_result);

}

通过此解决方案,如果您运行此代码,将看到以下结果:

Bean [family=null, name=Sally]

这个结果就是你的目标。

注意:在循环语句的最后一行,我使用了BeanUtilBean来自 Apache Commons Util通过 Reflection 填充对象.

此实用程序有问题,它不支持 Deep Comparator (也许我找不到它)你必须模拟这个任务。

要查看此库,请转到 http://code.google.com/p/jettison/ .

希望这个回答对你有帮助。

关于java - 尝试比较两个对象并提取包含它们差异的第三个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9681041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com