zoukankan      html  css  js  c++  java
  • 动态排序JavaBean

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

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

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

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

     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域进行排序。代码如下:

    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接口,利用反射根据指定的属性值来排序。使用该类的方法比自己实现该功能要好很多,希望读者认真掌握。

  • 相关阅读:
    PHP实现邮件的自动发送
    为PostgreSQL的表自动添加分区
    django
    django的logging模块
    job
    python 类的方法带的self理解
    java
    choice_set的理解
    django
    proxy_next_upstream带来的坑和加载sticky模块
  • 原文地址:https://www.cnblogs.com/mrxy/p/6603365.html
Copyright © 2011-2022 走看看