List集合如何根据泛型中某个属性进行排序
Posted 879991914li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List集合如何根据泛型中某个属性进行排序相关的知识,希望对你有一定的参考价值。
现有一个List<User>集合,User中有这两个属性(String name; Integer age) 要通过age对list进行重新排序,以下有三个方法:
第一种方法:让User实现 (implements) Comparable接口重写compareTo方法:
public class User implements Comparable<User>{ private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public User(String name, Integer age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User o) { return this.age.compareTo(o.getAge()); //默认是升序排列,前提是age必须是Integer类型 /*if(this.getAge()>o.getAge()) { //这个也是升序排列 return 1; //代码含义 :是如果当前对象的数值与对比对象的数值大的话 返回 1 ,就是说(o对象)放在了前边 } if(this.getAge()<o.getAge()) { return -1; //代码含义 :是如果当前对象的数值与对比对象的数值小的话 返回 -1 ,就是说(当前对象)放在了前边 } return 0;*/ //代码含义 :return 说明这两个值相等 不进行排序 /* * 定义降序,代码如下 * if(this.getAge()>o.getAge()){ * return -1; //代码含义 :是如果当前对象的数值与对比对象的数值大的话 返回 -1 ,就是说(当前对象)放在了前边 * } * if(this.getAge()<o.getAge()){ * return 1; //代码含义 :是如果当前对象的数值与对比对象的数值大的话 返回 -1 ,就是说(o对象)放在了前边 * } * return 0 ; * */ } }
return 1;//大于
return -1;//小于
通过Collections.sort(userList)重新排序
参考地址:https://blog.csdn.net/wuya112709/article/details/51422156 对comparable中 1、-1、0 的理解
第二种方法:如果User类没有实现comparable接口,可以自定义一个比较器(comparator<T>),重写compare方法自定义排序规则;
public class MyComparator implements Comparator<T>{ @Override public int compare(User o1, User o2) { if(o1.getAge()>o2.getAge()) {//升序 return 1; //代码含义:如果第一个数值大于第二个数值 返回 1,就是说把o1放在了o2前 }
if(o1.getAge()<o2.getAge()
return -1;//代码含义:如果第一个数值小于都二分数值 返回 -1,就是说把o2放在o1前
}
return 0; } }
通过Collections.sort(userList,new MyComparator())重新排序
降序就是
if(o1.getAge()>o2.getAge()) {//升序 return -1; //代码含义:如果第一个数值大于第二个数值 返回 -1,就是说把o1放在了o2后 } if(o1.getAge()<o2.getAge() return 1;//代码含义:如果第一个数值小于都二分数值 返回 1,就是说把o1放在了o2前 } return 0;
第三种方法:通过Collections.sort(userList,new comparator<User>(){
重载compare方法,定义排序规则
})
public static void main(String[] args) { List<User> uList = new ArrayList<>(); uList.add(new User("夏普",22)); uList.add(new User("二货",1)); uList.add(new User("烫头的",14)); uList.add(new User("抽烟的",12)); uList.add(new User("赵本山",24)); uList.add(new User("韩晓娟",3)); uList.add(new User("王海",41)); System.out.println("排序之前:"+uList); Collections.sort(uList, new Comparator<User>() { @Override public int compare(User o1, User o2) { if(o1.getAge()<o2.getAge()) { return 1; } if(o1.getAge()>o2.getAge()) { return -1; } return 0; } }); System.out.println("排序之后:"+uList); }
前两种方法一定要调用Collections.sort(userList)方法才会生效。
以上是关于List集合如何根据泛型中某个属性进行排序的主要内容,如果未能解决你的问题,请参考以下文章