JavaBeans比较

9 浏览
0 Comments

JavaBeans比较

有没有人知道一个免费的开源库(实用类),它允许您比较两个Java bean的实例,并返回这两个实例中值不同的属性的列表/数组?请发一个小示例。

谢谢

Tomas

0
0 Comments

JavaBeans Comparison这个问题的出现原因是BeanComparator只能比较单个属性,而不能同时比较多个字段。

解决方法是使用其他方法或工具来实现同时比较多个字段。下面是一个使用Apache commons的BeanUtils库中的CompareToBuilder来实现多字段比较的示例代码:

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.lang3.builder.CompareToBuilder;
public class TestBeanComparator {
    public TestBeanComparator() {
    }
    public class TestBean {
        int value;
        String name;
        public TestBean() {
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    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));
            tbs[i].setName("Name " + i);
            System.out.println("TestBean[" + i + "] = " + tbs[i].getValue() + ", " + tbs[i].getName());
        }
        BeanComparator bc = new BeanComparator("value", new CompareToBuilder().append("name").toComparison());
        System.out.println("");
        System.out.println("Value to match: " + tbs[0].getValue() + ", " + tbs[0].getName());
        for (int i = 1; i < tbs.length; i++) {
            if (bc.compare(tbs[i], tbs[0]) == 0) {
                System.out.println("Match found in bean " + i);
            }
        }
    }
}

这样就可以同时比较多个字段了。输出结果如下:

TestBean[0] = 0, Name 0
TestBean[1] = 4, Name 1
TestBean[2] = 0, Name 2
TestBean[3] = 2, Name 3
TestBean[4] = 7, Name 4
TestBean[5] = 3, Name 5
TestBean[6] = 0, Name 6
TestBean[7] = 3, Name 7
TestBean[8] = 7, Name 8
TestBean[9] = 3, Name 9
Value to match: 0, Name 0
Match found in bean 2
Match found in bean 6

注意,为了使用CompareToBuilder,需要导入Apache commons-lang3库。

希望以上内容对您有帮助。

0
0 Comments

JavaBeans Comparison问题的出现原因是需要对Java Bean进行比较和排序,而传统的Comparator实现需要编写大量的代码来实现比较多个属性的功能。为了解决这个问题,可以使用BeanComparator类来简化比较和排序的操作。

BeanComparator是一个Comparator的实现,它根据共享的属性值来比较Java Bean。它是一个通用的比较器,可以处理具有bean属性、数组、集合和映射的任何Java Bean。通过BeanComparator,我们可以根据需要对包含Person对象的List进行任意排序。

例如,如果我们有一个包含Person对象的List,其中Person对象有一个age属性(Integer类型)、一个name属性(String类型)和一个country属性(Country类型,它本身有一个name属性(String类型)),我们可以使用BeanComparator对List进行按照age、name或country name进行排序。

使用BeanComparator可以避免编写一个包含多个属性选项的PersonComparator类来实现排序功能,而是通过一个单独的BeanComparator类来处理所有的排序需求。

对于需要动态比较属性的情况(例如,根据用户选择的列对表格中的行进行排序),BeanComparator可以帮助简化代码的实现。相比于传统的方式,使用BeanComparator可以将大量的代码简化为几行代码。

然而,BeanComparator似乎无法同时比较多个字段。如果有多个包含Name、Age和Country Name属性的Java Bean,如何使用BeanComparator进行比较呢?目前还不确定是否可以比较超过两个Java Bean的属性,因为对BeanComparator的使用经验有限。

总之,JavaBeans Comparison问题的出现是因为需要对Java Bean进行比较和排序,而传统的Comparator实现需要编写大量的代码。解决这个问题的方法是使用BeanComparator类,它可以根据共享的属性值来比较Java Bean,并且可以简化比较和排序的操作。同时,BeanComparator还可以帮助简化动态比较属性的代码实现。然而,BeanComparator似乎无法同时比较多个字段,对于多个Java Bean的属性比较,目前还没有确定是否可以使用BeanComparator实现。

0