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 seesun2012@163.com
 *
 */
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 seesun2012@163.com
 *
 */
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


posted @ 2018-06-22 18:16  seesun2012  阅读(2109)  评论(0编辑  收藏  举报