Java中:對已有的List 進行排序


 

對於Java中一個已經存在的List<Bean>來說,要給他排序,傳統上有兩種方式:一個是Bean要實現Comparable接口,另一個是創建Comparator子類。

第一種方式需要在原有的Bean上擴展Comparable接口,一般使用不多,因為最好不要隨意更改JavaBean。

第二種方式則是獨立於原有JavaBean,實現的方法需要傳入兩個Bean對象。

關於這兩種方式的使用,可以參考:http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html

 

在排序的時候,用到Arrays.sort(Array arr,Comparator comparator)方法或者是Collentions.sort(Collection<?> coll,Comparator comparator)方法進行排序。

 

但是,這里我並不打算使用傳統的方式排序。傳統的方法一個需要擴展原有Bean,另一個需要新建一個Java類,這樣的工作方式看起來笨重,操作起來也不方便。如果要對10個不同類型List集合排序,它就需要擴展10個Bean,或者新建10個類。

下面的方法,使用到Apache Commons下的commons-beanutils和commons-collections包,實現的是一個簡單、通用的排序:

    /**
     * @describe 依據某個字段對集合進行排序
     * @author ...
     * @date 2013-1-22 下午3:44:47
     * @param list
     *            待排序的集合
     * @param fieldName
     *            依據這個字段進行排序
     * @param asc
     *            如果為true,是正序;為false,為倒序
     */
    @SuppressWarnings("unchecked")
    public static <T> void sort(List<T> list, String fieldName, boolean asc) {
        Comparator<?> mycmp = ComparableComparator.getInstance();
        mycmp = ComparatorUtils.nullLowComparator(mycmp); // 允許null
        if (!asc) {
            mycmp = ComparatorUtils.reversedComparator(mycmp); // 逆序
        }
        Collections.sort(list, new BeanComparator(fieldName, mycmp));
    }

這個方法完全沒必要使用泛型方法的定義,實際應用中可以去掉泛型方法定義。

 

一個使用的例子:

        List<Category> list = new ArrayList<Category>();
        Util.sort(list, "position", false);

position是Category類中一個用於排序字段。

 

關於commons-beanutils和commons-collections的詳細使用,這里不多介紹。有興趣的可以去查資料,研究一下。(如果不研究,上面的方法也是不能看懂的)

 

多一句:在Java中,如果遇到要做重復的事情,我們就來精神了,因為這樣的事情我們往往抽象出來做一次就夠了!

 

 

 

 


免責聲明!

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



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