您的位置:首页 > 编程语言 > Java开发

java List中对象多属性排序

2017-06-28 11:53 495 查看
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 + "]";

    }

    

}

如有什么问题请大家指出  共同学习  这只是本人的笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: