實現java.util.Comparator接口,對對象集合進行多屬性組合排序

Commons - BeanUtils 提供了不少功能,其中一個頗有用的是對對象集合進行排序,如Collections.sort(peoples, new BeanComparator("age"));java

另外,可使用java.util.Collections的sort方法能夠對collection集合進行排序,包括多列組合排序,下面是本身實現java.util.Comparator,定製對象屬性排序規則的例子:apache

package com.lph.test;orm

import java.util.Comparator;對象

import java.util.Iterator;排序

import java.util.List;ip

import java.util.LinkedList;get

/** 

* 自定義對象多屬性(多列)組合排序
* <p>Title: is a Class</p> 

* <p>Description: 類</p> 

* <p>Copyright: Copyright (c) 2006</p> 

* <p>Company: sunrise</p> 

@author islph 
@version 1.0 
*/ 
public class CompositeComparator implements Comparator {it

    /** in the condition list, comparators' priority decrease from head to tail */io

    private List comparators = new LinkedList();class

    /** get the comparators, you can manipulate it as need. */

    public List getComparators() {

        return comparators;

    }

    /** add a batch of comparators to the condition list */

    public void addComparators(Comparator[] comparatorArray) {

        if (comparatorArray == null) {

            return;

        }

        for (int i = 0; i < comparatorArray.length; i++) {

            comparators.add(comparatorArray[i]);

        }

    }

    /** compare by the priority */

    public int compare(Object o1, Object o2) {

        for (Iterator iterator = comparators.iterator(); iterator.hasNext();) {

            Comparator comparator = (Comparator) iterator.next();

            int result = comparator.compare(o1, o2);

            if (result != 0) {

                return result;

            }

        }

        return 0;

    }

}

 

// 多列排序;按屬性COUNTY_NO鎮,DDP_ID終端 組合排序

CompositeComparator myComparator = new CompositeComparator();

myComparator.addComparators(

new Comparator[] {

new Comparator() {

    public int compare(Object a, Object b) {

        DisplayForm aObj, bObj;

        aObj = (DisplayForm) a;

        bObj = (DisplayForm) b;

        String aStr = (String) aObj.get("COUNTY_NO");

        String bStr = (String) bObj.get("COUNTY_NO");

        return aStr.compareTo(bStr);

    }

}

new Comparator() {

    public int compare(Object a, Object b) {

        DisplayForm aObj, bObj;

        aObj = (DisplayForm) a;

        bObj = (DisplayForm) b;

        String aStr = (String) aObj.get("DDP_ID");

        String bStr = (String) bObj.get("DDP_ID");

        return aStr.compareTo(bStr);

    }

}

});

java.util.Collections.sort(listResult, myComparator);

相關文章
相關標籤/搜索