最新帖子 精华区 社区服务 会员列表 统计排行
主题 : 动态排序JavaBean
mrsoft 离线
级别: 菜鸟
UID: 44315
精华: 0
发帖: 22
金币: 0 个
银元: 32 个
铜钱: 380 个
技术分: 0 个
在线时间: 4(时)
注册时间: 2017-01-09
最后登录: 2017-04-27
楼主  发表于: 2017-03-23   

动态排序JavaBean

Java中如果对对象排序可以考虑实现Comparable接口,但是需要排序的属性一旦指定就不能再修改。BeanUtils组件提供了对JavaBean动态排序的支持,即可以在运行时指定排序的属性。实例运行效果如图



BeanComparator通过指定的属性来比较两个bean。它也可以用来比较级联属性、索引属性、映射属性和组合属性等。BeanComparator默认把指定的bean属性传递给ComparableComparator。如果比较的属性值可能有空值,那么应该传递一个合适的ComparatorComparatorChain给构造方法。

技巧:利用Collections组件的ComparatorUtils类可以实现含有空值的排序,请读者参考相关的API

1)编写Employee类,该类定义了3个域:id表示员工的序号,name表示员工的姓名,salary表示员工的薪水,并且提供了相应的getset方法。代码如下:

复制代码
  1. private int id;

        private String name;

        private double salary;

     

        public int getId() {

            return id;

        }

     

        public void setId(int id) {

            this.id = id;

        }

     

        public String getName() {

            return name;

        }

     

        public void setName(String name) {

            this.name = name;

        }

     

        public double getSalary() {

            return salary;

        }

     

        public void setSalary(double salary) {

            this.salary = salary;

        }

     

        @Override

        public String toString() {

            return "员工编号:" + id + ",员工姓名:" + name + ",员工工资:" + salary;

        }

    }


2)编写Test类,在该类的main()方法中创建了3Employee对象并进行初始化,然后使用salary域进行排序。代码如下:

复制代码
  1. package com.mingrisoft.beanutils;

     

    import java.util.ArrayList;

    import java.util.Collections;

    import java.util.List;

     

    import org.apache.commons.beanutils.BeanComparator;

     

    public class Test {

        @SuppressWarnings("unchecked")

        public static void main(String[] args) {

            Employee employee1 = new Employee();// 创建employee1对象并初始化

            employee1.setId(1);

            employee1.setName("IBM");

            employee1.setSalary(10000);

            Employee employee2 = new Employee();// 创建employee2对象并初始化

            employee2.setId(2);

            employee2.setName("Oracle");

            employee2.setSalary(1000);

            Employee employee3 = new Employee();// 创建employee3对象并初始化

            employee3.setId(3);

            employee3.setName("Sun");

            employee3.setSalary(100);

            List<Employee> list = new ArrayList<Employee>();// 创建list对象并保存全部员工对象

            list.add(employee1);

            list.add(employee2);

            list.add(employee3);

            System.out.println("排序前:");

            for (Employee employee : list) {

                System.out.println(employee);// 输出所有对象

            }

            Collections.<Employee> sort(list, new BeanComparator("salary"));// 进行排序

            System.out.println("按工资排序后:");

            for (Employee employee : list) {

                System.out.println(employee);// 输出所有对象

            }

        }

    }


心法领悟:动态排序的原理。

BeanComparator实现了Comparator接口,利用反射根据指定的属性值来排序。使用该类的方法比自己实现该功能要好很多,希望读者认真掌握。

描述
快速回复

批量上传需要先选择文件,再选择上传
认证码:

验证问题:
printf("%d", 33)
按"Ctrl+Enter"直接提交