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

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/mrxy/p/6603365.html
Copyright © 2011-2022 走看看