JavaBeans比较 [英] JavaBeans Comparison
问题描述
有没有人知道一个免费的开源库(实用程序类),它允许你比较一个Java bean的两个实例,并返回一个属性的列表/数组,这些值在这两个实例中是不同的?
干杯
Tomas
ApacheComponator 是您正在寻找的。 p>
更新。一个简单的例子,比较JavaBeans和一个属性(比较只是一个属性,你应该创建尽可能多的BeanComparators作为属性你想匹配)。
import org.apache.commons.beanutils.BeanComparator;
public class TestBeanComparator
{
public TestBeanComparator()
{
}
public class TestBean
{
int value;
public TestBean()
{
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}
public static void main(String [] args)
{
TestBeanComparator tbc = new TestBeanComparator();
tbc.go();
}
public void go()
{
TestBean tbs [] = new TestBean [10];
for(int i = 0; i {
tbs [i] = new TestBeanComparator.TestBean();
tbs [i] .setValue((int)(Math.random()* 10));
System.out.println(TestBean [+ i +] =+ tbs [i] .getValue());
}
BeanComparator bc = new BeanComparator(value);
System.out.println();
System.out.println(Value to match:+ tbs [0] .getValue());
for(int i = 1; i {
if(bc.compare(tbs [i],tbs [0])== 0)
{
System.out.println(Match found in bean+ i);
}
}
}
}
一些测试一个结果是成功的。这是输出:
TestBean [0] = 0
TestBean [1] = 4
TestBean [2] = 0
TestBean [3] = 2
TestBean [4] = 7
TestBean [5] = 3
TestBean [ [7] = 3
TestBean [8] = 7
TestBean [9] = 3
匹配值:0
在bean中找到匹配2
在bean中找到的匹配6
显然增加TestBean数组大小将增加匹配的机会。 p>
您需要将以下jars文件导入到您的项目:commons-logging- version .jar,commons-beanutils- > .jar,commons-beanutils-core- version .jar,commons-beanutils-bean-collections- version .jar,commons-collections- em> .jar。
这些文件包含在 commons-logging , commons-beanutils 和 commons-collections API。
Does anyone know about a free open source library (utility class) which allows you to compare two instances of one Java bean and return a list/array of properties which values are different in those two instances? Please post a small sample.
Cheers
Tomas
BeanComparator of Apache commons is what you are looking for.
Update. A simple example that compares JavaBeans with one property (comparation is made agains only one property, you should create as many BeanComparators as properties you want to match).
import org.apache.commons.beanutils.BeanComparator;
public class TestBeanComparator
{
public TestBeanComparator()
{
}
public class TestBean
{
int value;
public TestBean()
{
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}
public static void main(String[] args)
{
TestBeanComparator tbc = new TestBeanComparator();
tbc.go();
}
public void go()
{
TestBean tbs [] = new TestBean[10];
for (int i = 0; i < tbs.length; i++)
{
tbs[i] = new TestBeanComparator.TestBean();
tbs[i].setValue((int) (Math.random() * 10));
System.out.println("TestBean["+i+"] = " + tbs[i].getValue());
}
BeanComparator bc = new BeanComparator("value");
System.out.println("");
System.out.println("Value to match: " + tbs[0].getValue());
for (int i = 1; i < tbs.length; i++)
{
if(bc.compare(tbs[i], tbs[0]) == 0)
{
System.out.println("Match found in bean "+ i);
}
}
}
}
After some tests one result is successful. This is the output:
TestBean[0] = 0
TestBean[1] = 4
TestBean[2] = 0
TestBean[3] = 2
TestBean[4] = 7
TestBean[5] = 3
TestBean[6] = 0
TestBean[7] = 3
TestBean[8] = 7
TestBean[9] = 3
Value to match: 0
Match found in bean 2
Match found in bean 6
Obviously increasing TestBean array size will increase the chances to get matches.
You need to import to your project the following jars: commons-logging-version.jar, commons-beanutils-version.jar, commons-beanutils-core-version.jar, commons-beanutils-bean-collections-version.jar, commons-collections-version.jar.
The files are included inside commons-logging, commons-beanutils and commons-collections APIs.
这篇关于JavaBeans比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!