JAVA 使用Comparator接口实现自定义排序

1、原则

Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:
int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

 1 import java.util.ArrayList;
 2 import java.util.Comparator;
 3 import java.util.List;
 4 
 5 public class UserComparator implements Comparator < User > {
 6 
 7     public static void main( String[] args ) {
 8         List < User > users = new ArrayList < User >();
 9         users.add( new User( 10, "a" ) );
10         users.add( new User( 11, "d" ) );
11         users.add( new User( 15, "s" ) );
12         users.add( new User( 6, "x" ) );
13         users.add( new User( 17, "a" ) );
14         users.add( new User( 17, "b" ) );
15         users.add( new User( 17, "c" ) );
16         users.add( new User( 17, "d" ) );
17         UserComparator comparator = new UserComparator();
18 
19         users.sort( comparator );
20         // 也可以使用:Collections.sort( users, comparator );
21 
22         for ( User u : users ) {
23             System.out.println( u );
24         }
25     }
26 
27     @Override
28     public int compare( User u1, User u2 ) {
29         if ( u1.equals( u2 ) ) {
30             return 0;
31         }
32         else if ( u1.getAge() < u2.getAge() ) {
33             return 1;
34         }
35         else if ( u1.getAge() == u2.getAge() ) {
36             int f = u1.getName().compareTo( u2.getName() );
37             if ( f < 0 ) {
38                 return -1;
39             }
40             return 0;
41         }
42         else {
43             return -1;
44         }
45     }
46 }
47 
48 class User {
49     private int age;
50     private String name;
51 
52     public User() {
53 
54     }
55 
56     public User( int age, String name ) {
57         this.age = age;
58         this.name = name;
59     }
60 
61     public int getAge() {
62         return age;
63     }
64 
65     public void setAge( int age ) {
66         this.age = age;
67     }
68 
69     public String getName() {
70         return name;
71     }
72 
73     public void setName( String name ) {
74         this.name = name;
75     }
76 
77     @Override
78     public String toString() {
79         return "User [age=" + age + ", name=" + name + "]";
80     }
81 
82 }
User [age=17, name=a]
User [age=17, name=b]
User [age=17, name=c]
User [age=17, name=d]
User [age=15, name=s]
User [age=11, name=d]
User [age=10, name=a]
User [age=6, name=x]

 

posted @ 2018-10-19 14:34  孟阳miss  阅读(14012)  评论(0编辑  收藏  举报