如何對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類型的數據進行排序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM