原文出自: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