如何对List集合中的对象进行按某个属性排序
Posted baichunyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对List集合中的对象进行按某个属性排序相关的知识,希望对你有一定的参考价值。
我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序
当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法:
方法一
让list集合中的元素类型,也就是我们自定义的类实现Comparable<T>接口,并在类中编写public int compareTo(T o)方法。如下所示:
1 public class Test 2 3 public static void main(String[] args) 4 5 ArrayList<Entity> list=new ArrayList<Entity>(); 6 list.add(new Entity("李四",24)); 7 list.add(new Entity("张三",13)); 8 list.add(new Entity("王五",25)); 9 System.out.println("排序前:"+list); 10 Collections.sort(list); 11 System.out.println("排序后:"+list); 12 13 14 class Entity implements Comparable<Entity> 15 16 String name; 17 int age; 18 public Entity(String name, int age) 19 super(); 20 this.name = name; 21 this.age = age; 22 23 public String getName() 24 return name; 25 26 public void setName(String name) 27 this.name = name; 28 29 public int getAge() 30 return age; 31 32 public void setAge(int age) 33 this.age = age; 34 35 @Override 36 public String toString() 37 return "Entity [name=" + name + ", age=" + age + "]"; 38 39 @Override 40 public int compareTo(Entity o) 41 42 if(this.getAge()>o.getAge()) 43 44 return 1; 45 46 else if(this.getAge()<o.getAge()) 47 48 return -1; 49 50 else 51 52 return 0; 53 54 55
我们想对Entity这个类型按照age属性值从小到大排序,则方法一是让Entity这个类实现Comparable<Entity>接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。
输出结果:
排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]
方法二
方法二就是在排序的时候,给sort()方法传入一个比较器。具体来说,就是传入一个实现比较器接口的匿名内部类,目的是告诉sort()方法,按照比较器来对list中的对象进行排序。如下所示:
1 public class Test 2 3 public static void main(String[] args) 4 5 ArrayList<Entity> list=new ArrayList<Entity>(); 6 list.add(new Entity("李四",24)); 7 list.add(new Entity("张三",13)); 8 list.add(new Entity("王五",25)); 9 System.out.println("排序前:"+list); 10 Collections.sort(list,new Comparator<Entity>() 11 @Override 12 public int compare(Entity o1, Entity o2) 13 14 if(o1.getAge()>o2.getAge()) 15 16 return 1; 17 18 else if(o1.getAge()<o2.getAge()) 19 20 return -1; 21 22 else 23 24 return 0; 25 26 27 ); 28 System.out.println("排序后:"+list); 29 30 31 class Entity 32 33 String name; 34 int age; 35 public Entity(String name, int age) 36 super(); 37 this.name = name; 38 this.age = age; 39 40 public String getName() 41 return name; 42 43 public void setName(String name) 44 this.name = name; 45 46 public int getAge() 47 return age; 48 49 public void setAge(int age) 50 this.age = age; 51 52 @Override 53 public String toString() 54 return "Entity [name=" + name + ", age=" + age + "]"; 55 56
当给sort()方法传入比较器的时候,sort()方法就会根据比较器来对list中的对象进行排序。
输出结果:
排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]
而sort()方法为什么能对String类型的数据进行排序呢?
答案是,String这个类实现了Comparable<String>接口。所以,可以直接用Collections.sort(list);来对String类型的数据进行排序。
以上是关于如何对List集合中的对象进行按某个属性排序的主要内容,如果未能解决你的问题,请参考以下文章