当前位置:  开发笔记 > 编程语言 > 正文

JavaBeans比较

如何解决《JavaBeans比较》经验,为你挑选了2个好方法。

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

干杯
托马斯



1> Fernando Mig..:

Apache commons的BeanComparator是您正在寻找的.

更新.将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.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); 
            }
        }
    }
}

经过一些测试,一个结果是成功的.这是输出:

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

显然,增加TestBean数组大小将增加获得匹配的机会.

您需要将以下jar导入项目:commons- logging - version .jar,commons-beanutils- version .jar,commons-beanutils-core- version .jar,commons-beanutils-bean-collections- version .jar,commons -collections- version .jar.

这些文件包含在commons-logging,commons-beanutils和commons-collections API中.



2> VonC..:

BeanComparator可用于集合排序.
它是一种Comparator基于共享属性值比较bean 的实现.

BeanComparators是可以对任何Java Bean起作用的通用比较器.通过良好的底层bean反射系统,他们可以处理具有bean属性,数组,集合和映射的bean.

如果我们有一个java.util.List类型的Java Bean Person- 其中Person一个年龄是一个Integer,一个名称是一个字符串,一个国家是一个国家bean(它本身有一个字符串名称) - 我们可以随意对它进行排序BeanComparator.

一些例子:

List people = ...; // list of Person objects

//sort by age
BeanComparator comp = new BeanComparator("age");
Collections.sort(list, comp);

//sort by name
BeanComparator comp = new BeanComparator("name");
Collections.sort(list, comp);

//sort by country name
BeanComparator comp = new BeanComparator("country.name");
Collections.sort(list, comp);

没有必要写一个PersonComparator有很多属性选项来排序.相反,一个BeanComparator班级负责一切.


您将在此处找到完整的示例,其中包含以下方案:

如果您正在实现比较器以动态比较属性(例如,考虑根据客户选择的列在网页上对表中的行进行排序),那么您可以推迟构建比较器,直到您知道选择了哪个属性为止排序.

这是BeanComparator真正闪耀的地方.在您使用时,通常用于实现此行为的大量代码将减少到几行BeanComparator.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有