原文出自:https://blog.csdn.net/seesun2012
java
簡介如題:Java如何操做對象(bean)進行動態排序?Java實體類(bean)動態排序?apache
原理:利用反射
根據指定的屬性值
來排序
;ide
技巧:利用Collections
組件的ComparatorUtils類
能夠實現含有空值
的排序,請讀者參考相關的API
;測試
(1)編寫Student類,該類定義了3個域:id,name,score,而且提供了相應的get和set方法。代碼以下:this
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域進行排序。代碼以下:.net
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
code
按【成績】排序後:
學生編號:2,學生姓名:李四,分數:59.99
學生編號:1,學生姓名:王五,分數:80.0
學生編號:3,學生姓名:張三,分數:100.0
對象