我們在實際的開發工作中,經常會碰到排序的問題,如題,我們如何針對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類型的數據進行排序。