Java如何操做對象(bean)進行動態排序?

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


按【成績】排序後:
學生編號:2,學生姓名:李四,分數:59.99
學生編號:1,學生姓名:王五,分數:80.0
學生編號:3,學生姓名:張三,分數:100.0對象

相關文章
相關標籤/搜索