Java如何操作对象(bean)进行动态排序?

原文出自:https://blog.csdn.net/seesun2012

简介如题:Java如何操作对象(bean)进行动态排序?Java实体类(bean)动态排序?


原理:利用反射根据指定的属性值排序

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


(1)编写Student类,该类定义了3个域:id,name,score,并且提供了相应的get和set方法。代码如下:

package com.seesun2012.test;
import java.io.Serializable;

/**
 * 学生类
 *
 * @author [email protected]
 *
 */
public class Student implements Serializable{

    private static final long serialVersionUID = -2551164688062992567L;

    private int id;         //编号
    private String name;    //姓名
    private double score;   //分数

    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 getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "学生编号:" + id + ",学生姓名:" + name + ",分数:" + score;
    }

}

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

package com.seesun2012.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;

/**
 * Java实体类(bean)动态排序
 *
 * @author [email protected]
 *
 */
public class BeanSortTest {
    public static void main(String[] args){

        Student s = new Student();
        s.setId(1);
        s.setName("张三");
        s.setScore(80.00);

        Student s1 = new Student();
        s1.setId(2);
        s1.setName("李四");
        s1.setScore(100.00);

        Student s2 = new Student();
        s2.setId(3);
        s2.setName("王五");
        s2.setScore(59.99);

        List<Student> list = new ArrayList<Student>();
        list.add(s);
        list.add(s1);
        list.add(s2);

        System.out.println("排序前:");
        for (Student sd : list) {
            System.out.println(sd);// 输出所有对象
        }
        
        ////////////// 进行排序(特别注意,这里可以动态入参)//////////////
        Collections.<Student> sort(list, new BeanComparator<Student>("score"));
        System.out.println("按成绩排序后:");
        for (Student sd : list) {
            System.out.println(sd);// 输出所有对象
        }
        
    }
}

排序前:
学生编号:1,学生姓名:张三,分数:80.0
学生编号:2,学生姓名:李四,分数:100.0
学生编号:3,学生姓名:王五,分数:59.99


按【成绩】排序后:
学生编号:2,学生姓名:李四,分数:59.99
学生编号:1,学生姓名:王五,分数:80.0
学生编号:3,学生姓名:张三,分数:100.0


猜你喜欢

转载自www.cnblogs.com/seesun2012/p/9214968.html