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 + "]";
}
}
如有什么问题请大家指出 共同学习 这只是本人的笔记
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 + "]";
}
}
如有什么问题请大家指出 共同学习 这只是本人的笔记
相关文章推荐
- java list按照元素对象的指定多个字段属性进行排序
- Java面试题,List集合中根据对象的某一属性排序
- 【原创】Java 对 List 内对象根据对象属性进行排序
- java对list中对象的属性排序
- Java(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法
- java根据List内对象的属性排序方法
- java list按照 对象 指定多个字段属性进行排序
- java使用Comparator根据list对象的属性进行排序
- java 对list中对象按属性排序
- java List对对象的属性排序
- Java实现根据List中对象的相应属性进行排序
- java list按照 对象 指定多个字段属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- java list按照 对象 指定多个字段属性进行排序
- java List Collections.sort 排序 支持 对象属性 普通数据类型
- java针对list中的对象的某一属性进行排序
- java List Collections.sort 排序 支持 对象属性 普通数据类型 升序 降序 正序 倒序 排列
- java list按照元素对象的指定多个字段属性进行排序
- Java 中List数据,自定义对象按指定的属性进行排序