首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaBeans比较

JavaBeans比较
EN

Stack Overflow用户
提问于 2009-01-12 21:35:02
回答 2查看 8K关注 0票数 10

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

干杯

托马斯

EN

回答 2

Stack Overflow用户

发布于 2009-01-12 22:10:32

Apache的BeanComparator是您要寻找的内容。

更新.一个将JavaBeans与一个属性进行比较的简单示例(只对一个属性进行比较,您应该创建想要匹配的属性数量的BeanComparators )。

代码语言:javascript
复制
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); 
            }
        }
    }
}

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

代码语言:javascript
复制
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数组大小将增加获得匹配的机会。

您需要将以下jars导入到您的项目中:commons version.jar,commons version.jar,commons core-version.jar,commons-beanutils-bean-collections-version.jar,commons-collections version.jar。

这些文件包含在共用测井公-豆类共用-收藏 API中。

票数 8
EN

Stack Overflow用户

发布于 2009-01-12 22:21:41

BeanComparator可以用于集合排序

它是一个基于共享属性值比较bean的Comparator实现。

BeanComparators是通用比较器,可以对任何Java进行操作。通过良好的底层bean反射系统,它们可以处理具有bean属性、数组、集合和映射的bean。 如果我们有一个java.util.List of Java类型的Person --其中Person的年龄是一个Integer,一个名称是一个字符串,以及一个国家是一个国家bean (它本身有一个字符串名称)--,那么我们可以使用来对它进行排序。 一些例子

代码语言:javascript
复制
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类来处理这一切。

您将找到一个这里是完整的例子,其场景如下:

如果要实现比较器来动态比较属性(例如,根据客户选择的列对Web页面上的表中的行进行排序),则可以推迟构建比较器,直到知道选择了哪个属性进行排序。 这就是BeanComparator真正闪耀的地方。当您使用BeanComparator时,通常为实现此行为而编写的大量代码将减少到几行。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/437093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档