List集合對象中按照不同屬性大小排序的實例


 

實例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.huad.luck;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class Test {
     public static void main(String[] args) {
         Person p = new Person();
         p.setName( "tom" );
         p.setAge( 11 );
         Person p1 = new Person();
         p1.setName( "lilei" );
         p1.setAge( 19 );
         Person p2 = new Person();
         p2.setName( "json" );
         p2.setAge( 15 );
         List<Person> list = new ArrayList<Person>();
         list.add(p);
         list.add(p1);
         list.add(p2);
         Collections.sort(list, new Comparator<Person>() {
             //這里可以再Person中實現 Comparator<T>接口,重寫compare方法
             @Override
             public int compare(Person o1, Person o2) {
                 //這里按照名字排序
                  return o1.getName().compareTo(o2.getName());
                  //這里按照age排序
                  //return (o1.getAge()+"").compareTo(o2.getAge()+"");
                  //。。。根據不同屬性值排序
            
 
         });
         for ( int i = 0 ; i < list.size(); i++) {
             System.out.println(list.get(i).getName());
         }
     }
}
//Person類
package com.huad.luck;
 
public class Person{
     private String name ;
     private int age;
     
     public Person(String name , int age) {
         this .name = name;
         this .age = age;
     }
     public Person( ) {
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this .name = name;
     }
     public int getAge() {
         return age;
     }
     public void setAge( int age) {
         this .age = age;
     }
 
}
<p style= "padding-top: 0px; padding-bottom: 0px; margin-top: 8px; margin-bottom: 8px; line-height: 22.5px; letter-spacing: 0.5px; font-size: 12.5px; word-wrap: break-word; word-break: break-all; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋體;" ><span style= "padding: 0px; margin: 0px; letter-spacing: normal; font-stretch: normal; font-size: 14px; line-height: 24px; font-family: Tahoma; color: rgb(0, 0, 0);" >用collection.sort()方法對list集合排序</span><br style= "padding: 0px; margin: 0px;" /></p><p style= "padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;" ><span style= "padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;" ><span style= "padding: 0px; margin: 0px; list-style: none outside none; line-height: 21px; word-wrap: break-word; word-break: normal;" ></span></span></p><p style= "padding-top: 0px; padding-bottom: 0px; margin-top: 1em; margin-bottom: 0.5em; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;" >第一種是list中的對象實現Comparable接口,如下:<span style= "padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;" > </span></p><pre class = "java" style= "padding: 5px; margin-top: 0px; margin-bottom: 0px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); background: rgb(246, 246, 246);" > /**
* 根據order對User排序
*/
public class User implements Comparable<User>{
   private String name;
   private Integer order;
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this .name = name;
   }
   public Integer getOrder() {
     return order;
   }
   public void setOrder(Integer order) {
     this .order = order;
   }
   public int compareTo(User arg0) {
     return this .getOrder().compareTo(arg0.getOrder());
   }
}

測試一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test{
   public static void main(String[] args) {
     User user1 = new User();
     user1.setName( "a" );
     user1.setOrder( 1 );
     User user2 = new User();
     user2.setName( "b" );
     user2.setOrder( 2 );
     List<User> list = new ArrayList<User>();
     //此處add user2再add user1
     list.add(user2);
     list.add(user1);
     Collections.sort(list);
     for (User u : list){
       System.out.println(u.getName());
     }
   }
}

輸出結果如下

a
b

第二種方法是根據Collections.sort重載方法來實現,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 根據order對User排序
*/
public class User { //此處無需實現Comparable接口
   private String name;
   private Integer order;
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this .name = name;
   }
   public Integer getOrder() {
     return order;
   }
   public void setOrder(Integer order) {
     this .order = order;
   }
}

主類中這樣寫即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Test{
   public static void main(String[] args) {
     User user1 = new User();
     user1.setName( "a" );
     user1.setOrder( 1 );
     User user2 = new User();
     user2.setName( "b" );
     user2.setOrder( 2 );
     List<User> list = new ArrayList<User>();
     list.add(user2);
     list.add(user1);
     
     Collections.sort(list, new Comparator<User>(){
       public int compare(User arg0, User arg1) {
         return arg0.getOrder().compareTo(arg1.getOrder());
       }
     });
     for (User u : list){
       System.out.println(u.getName());
     }
   }
}

輸出結果如下

a
b

前者代碼結構簡單,但是只能根據固定的屬性排序,后者靈活,可以臨時指定排序項,但是代碼不夠簡潔

多字段的場合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Collections.sort(list, new  Comparator<User>(){ 
 
public  int  compare(User arg0, User arg1) { 
 
// 第一次比較專業 
 
int  i = arg0.getOrder().compareTo(arg1.getOrder());
 
// 如果專業相同則進行第二次比較 
 
if (i== 0 ){ 
 
// 第二次比較 
 
int  j=arg0.getXXX().compareTo(arg1.getXXX()); 
 
// 如果學制相同則返回按年齡排序 
 
if (j== 0 ){ 
 
return  arg0.getCCC().compareTo(arg1.getCCC()); 
 
 
return  j; 
 
 
return  i; 
 
 
});

以下是另外一個例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package  test;
 
import  java.util.ArrayList; 
 
import  java.util.Collections; 
 
import  java.util.Comparator;
 
public  class  ArrayListTest { 
 
public  static  void  main(String[] args) { 
 
ArrayList<Exmployee> arrayList =  new  ArrayList<Exmployee>() ; 
 
arrayList.add( new  Exmployee( "zengqiang" , new  Integer( 5000 ))) ; 
 
arrayList.add( new  Exmployee( "zengmin" , new  Integer( 4000 ))) ; 
 
arrayList.add( new  Exmployee( "liuxiaojuan" , new  Integer( 4200 ))) ; 
 
arrayList.add( new  Exmployee( "giuming" , new  Integer( 2200 ))) ; 
 
Collections.sort(arrayList,  new  Comparator<Exmployee>(){ 
 
public  int  compare(Exmployee arg0, Exmployee arg1) { 
 
return  arg1.getSalary()-arg0.getSalary() ;  //按照工資升序 
 
//return arg0.getSalary()-arg1.getSalary() ; 按照工資降序 
 
//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序 
 
 
}); 
 
for (Exmployee e:arrayList) 
 
System.out.println(e.getName()+ "'s salary is " +e.getSalary()) ; 
 
}
 
}
 
class  Exmployee { 
 
public  Exmployee(String name,  int  salary) { 
 
this .name = name ; 
 
this .salary = salary ; 
 
}
 
private  String name;
 
public  String getName() { 
 
return  name; 
 
}
 
public  void  setName(String name) { 
 
this .name = name; 
 
}
 
public  int  getSalary() { 
 
return  salary; 
 
}
 
public  void  setSalary( int  salary) { 
 
this .salary = salary; 
 
}
 
private  int  salary; 
 
}

以上這篇List集合對象中按照不同屬性大小排序的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


免責聲明!

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



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