List集合如何根据泛型中某个属性进行排序

2021-01-22 16:16

阅读:783

标签:com   ali   比较   tar   under   对比   sdn   sort   数值   

现有一个List集合,User中有这两个属性(String name; Integer age) 要通过age对list进行重新排序,以下有三个方法:


第一种方法:让User实现 (implements)  Comparable接口重写compareTo方法:

public class User implements Comparable{
	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 ,就是说(当前对象)放在了前边
		 * }
		 * if(this.getAge()

  return 1;//大于

  return -1;//小于

  通过Collections.sort(userList)重新排序

  参考地址:https://blog.csdn.net/wuya112709/article/details/51422156  对comparable中 1、-1、0 的理解


 第二种方法:如果User类没有实现comparable接口,可以自定义一个比较器(comparator),重写compare方法自定义排序规则;

public class MyComparator implements Comparator{

	@Override
	public int compare(User o1, User o2) {
		if(o1.getAge()>o2.getAge()) {//升序
			return 1; //代码含义:如果第一个数值大于第二个数值 返回 1,就是说把o1放在了o2前
		}
          if(o1.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()

  


 

第三种方法:通过Collections.sort(userList,new comparator(){

  重载compare方法,定义排序规则

})

public static void main(String[] args) {
		List 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() {

			@Override
			public int compare(User o1, User o2) {
				if(o1.getAge()o2.getAge()) {
					return -1;
				}
				return 0;
			}
		});
		System.out.println("排序之后:"+uList);
	}

 

前两种方法一定要调用Collections.sort(userList)方法才会生效。

List集合如何根据泛型中某个属性进行排序

标签:com   ali   比较   tar   under   对比   sdn   sort   数值   

原文地址:https://www.cnblogs.com/879991914li/p/12887710.html


评论


亲,登录后才可以留言!