`

BeanComparator实现ArrayList中的元素按多个属性复合排序

阅读更多
import java.util.Collections;      
import java.util.Comparator;      
import java.util.ArrayList;      
import org.apache.commons.beanutils.BeanComparator;      
import org.apache.commons.collections.ComparatorUtils;      
import org.apache.commons.collections.comparators.ComparableComparator;      
import org.apache.commons.collections.comparators.ComparatorChain;      
 
public class CompareTipA  {      
    private int  id;      
    private String  name;      
    private String age;      
 
    @SuppressWarnings("unchecked")  
    public static void main(String []args) {      
 
        //在列表中加入若干CompareTipA对象  
        ArrayList<Object> list = new ArrayList<Object>();      
        list.add(new CompareTipA(1,"3","五"));      
        list.add(new CompareTipA(1,"1","六"));      
        list.add(new CompareTipA(1,"5","二"));      
        list.add(new CompareTipA(1,"4","四"));      
        list.add(new CompareTipA(4,"2","一"));      
 
        //创建一个排序规则  
        Comparator mycmp = ComparableComparator.getInstance();      
        mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允许null         
        mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序         
 
        //声明要排序的对象的属性,并指明所使用的排序规则,如果不指明,则用默认排序  
        ArrayList<Object> sortFields = new ArrayList<Object>();      
        sortFields.add(new BeanComparator("id", mycmp)); //id逆序  (主)      
        sortFields.add(new BeanComparator("name"));      //name正序 (副)   
 
        //创建一个排序链  
        ComparatorChain multiSort = new ComparatorChain(sortFields);   
 
        //开始真正的排序,按照先主,后副的规则  
        Collections.sort(list,multiSort);      
 
        for (int i =0;i<list.size();i++) {      
            System.out.println(list.get(i));    //输出      
        }      
        /** 
         * 输出结果如下: 
         * [id=4,name=2,age=一] 
         * [id=1,name=1,age=六] 
         * [id=1,name=3,age=五] 
         * [id=1,name=4,age=四] 
         * [id=1,name=5,age=二] 
         */ 
    }      
 
    public CompareTipA(int id, String name,String age) {      
        this.id = id;      
        this.name = name;      
        this.age = age;      
    }      
 
    public int getId() {      
        return this.id;      
    }      
 
    public void setId(int id) {      
        this.id = id;      
    }      
 
    public String getName() {      
        return this.name;      
    }      
 
    public void setName(String name) {      
        this.name = name;      
    }      
 
//    public int compareTo(Object o) {      
//        return this.comparator.compare(this, o);      
//    }      
 
    public String toString() {      
        return "[id=" + this.id + ",name=" + this.name +",age=" + this.age +"]";      
    }      
 
    public String getAge() {      
        return age;      
    }      
 
    public void setAge(String age) {      
        this.age = age;      
    }      

分享到:
评论

相关推荐

    根据对象属性将对象排序

    本文档将详细讲解如何通过对象的一个或多个属性来实现对象的排序,并支持正序与倒序排序。 #### 一、项目位置 本项目的包名为 `packagecom.mpt.util.`,类名为 `ComparatorUtil`。这个类提供了用于根据对象的属性...

    Comparator

    在这个场景中,我们关注的是`org.apache.commons.beanutils.BeanComparator`,这是一个由Apache Commons BeanUtils项目提供的特殊`Comparator`实现,它专门用来对对象的属性进行比较和排序。 `BeanComparator`类...

    Java中对list元素进行排序的方法详解

    虽然`BeanComparator`一次只能对一个属性进行排序,但可以通过链式调用创建多个`BeanComparator`来实现多属性排序。例如,可以先根据`property1`排序,再根据`property2`排序。具体实现步骤如下: - 引入`...

    Beanutils基本用法.doc

    BeanComparator是Beanutils提供的一个用于比较JavaBean中特定属性值的工具类,它可以方便地实现对Bean列表的排序。 ##### 单属性排序 ```java List&lt;Person&gt; peoples = ...; // Person对象的列表 Collections.sort...

    BeanUtils.rar

    6. `BeanComparator`: 用于基于JavaBean的属性进行比较,可以实现自定义排序。 7. `PropertyUtils`:BeanUtils的一个扩展,提供了更多的属性操作方法,如遍历所有属性、动态调用属性方法等。 在实际开发中,...

    beanutils-1.9.3jar包

    4. **BeanComparator**: BeanUtils还提供了一个`BeanComparator`类,用于基于JavaBean的属性值进行比较,这对于排序和集合操作很有帮助。 5. **Naming Policy**: BeanUtils支持自定义命名策略,这在处理属性名与...

    commons-beanutils-1.9.4-src.zip

    3. **复制属性**:`copyProperties()`方法允许开发者将一个对象的属性值复制到另一个对象上,实现了对象间的属性映射,这对于数据迁移或对象克隆非常有用。 4. **反射支持**:BeanUtils库利用Java的反射API,动态地...

Global site tag (gtag.js) - Google Analytics