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集合如何根据泛型中某个属性进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Java关于list集合根据集合元素对象的某个或多个属性进行排序的工具类

如何对List集合中的对象进行按某个属性排序

Java集合与泛型中的几个陷阱,你掉进了几个?

java如何获得泛型中的类

如何对List集合中的对象进行排序?

java泛型中的super和extend