java List中对象多属性排序

来源:互联网 发布:淘宝店铺流量来源查询 编辑:程序博客网 时间:2024/05/21 01:48
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**

注意以下包必须使用

注意commons-logging包也是commons-beanutils包所需要的。必须有commons-logging包.

*/

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 TestMain {


    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person(1, "啊啊", "20170606", "男", "25"));
        list.add(new Person(1, "啊从", "20170607", "女", "28"));
        list.add(new Person(2, "啊吧", "20170607", "女", "29"));
        list.add(new Person(1, "从啊", "20170608", "男", "25"));
        list.add(new Person(2, "吧啊", "20170608", "男", "22"));
        list.add(new Person(1, "从的啊", "20170608", "男", "25"));
        sort(list);
        for (Person p : list) {
            System.out.println(p.toString());
        }
    }


    public static void sort (List<Person> list) {
        //构建一个默认比较器
        Comparator myCom = ComparableComparator.getInstance();
        //逆序
        myCom = ComparatorUtils.reversedComparator(myCom);
        //允许null
        myCom = ComparatorUtils.nullLowComparator(myCom);
        //构建一个java.util.Locale.CHINA比较器 比较汉字
        Comparator myComOne = Collator.getInstance(java.util.Locale.CHINA);
        //允许null
        myComOne = ComparatorUtils.nullLowComparator(myComOne);
        //泛型必须使用Object 因为list.add(new BeanComparator<>("id", myCom))
        List<Object> listTemp = new ArrayList<>();
        /*
         * 先add为主 其中第一个参数为需要排序的对象属性,第二个参数为排序规则 如果有integer型数据 第二个参数不能
         * 使用Comparator myComOne = Collator.getInstance(java.util.Locale.CHINA); 比较 会报异常类型转换异常 integer to String 异常
         * 
         * 依据添加的顺序进行排序
         * 如下 会先根据 id排序 相同再根据 name排序
         */
        listTemp.add(new BeanComparator("id", myCom));
        listTemp.add(new BeanComparator("name", myComOne));
        //创建一个排序链
        ComparatorChain chain = new ComparatorChain(listTemp);
        /*
         * 上面的可以使用以下方式进行
         * chain.addComparator(comparator);
         */
        Collections.sort(list, chain);
    }

}

//=================

package my.list.paixu.hanzi.test;


import java.io.Serializable;


public class Person implements Serializable {
    
    private static final long serialVersionUID = 3475846955560870725L;
    private int id;
    private String name;
    private String date;
    private String sex;
    private String age;
    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 String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public Person(int id, String name, String date, String sex, String age) {
        super();
        this.id = id;
        this.name = name;
        this.date = date;
        this.sex = sex;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", date=" + date + ", sex=" + sex + ", age=" + age + "]";
    }
    
}



如有什么问题请大家指出  共同学习  这只是本人的笔记

原创粉丝点击