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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM