Comparator的用法

实现Comparator接口是一种很好的比较方式,Comparator体现了一种策略模式,
即可以不用要把比较方法嵌入到类中,而是单独在类外部使用,
这样我们就可有不用改变类本身的代码而实现对类对象进行排序,这样可以降低耦合度。

使用lambda表达式来实现Comparator可以使代码看起来更简洁。


  1 import java.util.ArrayList;
  2 import java.util.Collections;
  3 import java.util.Comparator;
  4 import java.util.List;
  5 
  6 public class LearnComparator {
  7     /**
  8      * Entity*/
  9     static class User{
 10 
 11         String name;
 12         int age;
 13         int money;
 14 
 15         public int getMoney() {
 16             return money;
 17         }
 18 
 19         public void setMoney(int money) {
 20             this.money = money;
 21         }
 22 
 23         public User(String name, int age) {
 24             this.name = name;
 25             this.age = age;
 26         }
 27         public User(String name, int age, int money) {
 28             this.name = name;
 29             this.age = age;
 30             this.money = money;
 31         }
 32 
 33         public String getName() {
 34             return name;
 35         }
 36 
 37         public void setName(String name) {
 38             this.name = name;
 39         }
 40 
 41         public int getAge() {
 42             return age;
 43         }
 44 
 45         public void setAge(int age) {
 46             this.age = age;
 47         }
 48     }
 49 
 50     /**
 51      * define the specified comparator, compared by User's name
 52      * implements compare() method*/
 53     static class NameComparator implements Comparator<User>{
 54         public int compare(User u1,User u2){
 55             return u1.getName().compareTo(u2.getName());
 56         }
 57     }
 58 
 59     /**
 60      * define another specified comparator, compared by User's age*/
 61     static class AgeComparator implements Comparator<User>{
 62         public int compare(User u1,User u2){
 63             return u1.getAge()-u2.getAge();
 64         }
 65     }
 66 
 67     public static void main(String[] args) {
 68         List<User> list = new ArrayList<>();
 69         list.add(new User("Henry",21,100));
 70         list.add(new User("Jerry",22,300));
 71         list.add(new User("Tom",18,200));
 72         list.add(new User("Bill",19,50));
 73         for(User u : list){
 74             System.out.println(u.getName());
 75         }
 76 
 77         Collections.sort(list,new NameComparator());//sort by name
 78 
 79         for(User u : list){
 80             System.out.println(u.getName());
 81         }
 82         for(User u : list){
 83             System.out.println(u.getAge());
 84         }
 85 
 86         Collections.sort(list,new AgeComparator());//sort by age
 87 
 88         for(User u : list){
 89             System.out.println(u.getAge());
 90         }
 91 
 92         for(User u : list){
 93             System.out.println(u.getMoney());
 94         }
 95 
 96         /**
 97          * We can also use lambda expression to implements comparator
 98          * */
 99         Collections.sort(list,(u1,u2) -> (u1.getMoney()-u2.getMoney()));
100 
101         for(User u : list){
102             System.out.println(u.getMoney());
103         }
104     }
105 }

 


posted @ 2020-07-05 22:06  电梯调度真好玩  阅读(3)  评论(0)    收藏  举报