• Comparator匿名实现


    Comparable和Comparator都是排序的接口,都可以用类来实现,排序效果一样。

    Comparable一般用类来实现,就是大家所说的自然排序;

    Comparator一般用来匿名实现,作为集合的比较器,也就是定制排序;

    Test测试类

     1 package comparatest3;
     2 
     3 import java.util.*;
     4 /**
     5  * 
     6  * @author likainian
     7  *    1784186573@qq.com
     8  */
     9 public class Test {
    10     public static void main(String[] args) {
    11         TreeSet<Person>ts=new TreeSet<>(new Comparator<Person>(){
    12 
    13             @Override
    14             public int compare(Person o1, Person o2) {
    15                 int m=-Integer.valueOf(o1.getMoney()).compareTo(Integer.valueOf(o2.getMoney()));
    16                 int a=Integer.valueOf(o1.getAge()).compareTo(Integer.valueOf(o2.getAge()));
    17                 int n=o1.getName().compareTo(o2.getName());
    18                 int b=Integer.valueOf(o1.getBook().getPrice()).compareTo(Integer.valueOf(o2.getBook().getPrice()));
    19                 return (m!=0?m:(a!=0?a:(n!=0?n:b)));
    20             }});
    21         Book b1=new Book("a", 12);
    22         Book b2=new Book("b", 12);
    23         Book b3=new Book("c", 12);
    24         Person p1=new Person("a", 1, 1, b1);
    25         Person p2=new Person("a", 2, 1, b2);
    26         Person p3=new Person("a", 1, 1, b3);
    27         ts.add(p1);
    28         ts.add(p2);
    29         ts.add(p3);
    30         System.out.println(ts);
    31         
    32     }
    33 }

    Person类

     1 package comparatest3;
     2 
     3 public class Person{
     4     private String name;
     5     private int money;
     6     private int age;
     7     private Book book;
     8     public Person(String name, int money, int age, Book book) {
     9         super();
    10         this.name = name;
    11         this.money = money;
    12         this.age = age;
    13         this.book = book;
    14     }
    15     public String getName() {
    16         return name;
    17     }
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21     public int getMoney() {
    22         return money;
    23     }
    24     public void setMoney(int money) {
    25         this.money = money;
    26     }
    27     public int getAge() {
    28         return age;
    29     }
    30     public void setAge(int age) {
    31         this.age = age;
    32     }
    33     public Book getBook() {
    34         return book;
    35     }
    36     public void setBook(Book book) {
    37         this.book = book;
    38     }
    39 //    @Override
    40 //    public int compareTo(Person o) {
    41 //        int m=-Integer.valueOf(money).compareTo(Integer.valueOf(o.money));
    42 //        int a=Integer.valueOf(age).compareTo(Integer.valueOf(o.age));
    43 //        int n=name.compareTo(o.name);
    44 //        int b=book.compareTo(o.book);
    45 //        return (m!=0?m:(a!=0?a:(n!=0?n:b)));
    46 //    }
    47     
    48     @Override
    49     public int hashCode() {
    50         final int prime = 31;
    51         int result = 1;
    52         result = prime * result + age;
    53         result = prime * result + ((book == null) ? 0 : book.hashCode());
    54         result = prime * result + money;
    55         result = prime * result + ((name == null) ? 0 : name.hashCode());
    56         return result;
    57     }
    58     @Override
    59     public boolean equals(Object obj) {
    60         if (this == obj)
    61             return true;
    62         if (obj == null)
    63             return false;
    64         if (getClass() != obj.getClass())
    65             return false;
    66         Person other = (Person) obj;
    67         if (age != other.age)
    68             return false;
    69         if (book == null) {
    70             if (other.book != null)
    71                 return false;
    72         } else if (!book.equals(other.book))
    73             return false;
    74         if (money != other.money)
    75             return false;
    76         if (name == null) {
    77             if (other.name != null)
    78                 return false;
    79         } else if (!name.equals(other.name))
    80             return false;
    81         return true;
    82     }
    83     @Override
    84     public String toString() {
    85         return "Person [name=" + name + ", money=" + money + ", age=" + age
    86                 + ", book=" + book + "]";
    87     }
    88     
    89 }

    Book类

     1 package comparatest3;
     2 
     3 public class Book {
     4     private String name;
     5     private int price;
     6 
     7     public Book(String name, int price) {
     8         super();
     9         this.name = name;
    10         this.price = price;
    11     }
    12 
    13     public String getName() {
    14         return name;
    15     }
    16 
    17     public void setName(String name) {
    18         this.name = name;
    19     }
    20 
    21     public int getPrice() {
    22         return price;
    23     }
    24 
    25     public void setPrice(int price) {
    26         this.price = price;
    27     }
    28 
    29 //    @Override
    30 //    public int compareTo(Book o) {
    31 //        int p=Integer.valueOf(price).compareTo(Integer.valueOf(o.price));
    32 //        int n=name.compareTo(o.name);
    33 //        return (p!=0 ? p : n);
    34 //    }
    35 
    36     @Override
    37     public int hashCode() {
    38         final int prime = 31;
    39         int result = 1;
    40         result = prime * result + ((name == null) ? 0 : name.hashCode());
    41         result = prime * result + price;
    42         return result;
    43     }
    44 
    45     @Override
    46     public boolean equals(Object obj) {
    47         if (this == obj)
    48             return true;
    49         if (obj == null)
    50             return false;
    51         if (getClass() != obj.getClass())
    52             return false;
    53         Book other = (Book) obj;
    54         if (name == null) {
    55             if (other.name != null)
    56                 return false;
    57         } else if (!name.equals(other.name))
    58             return false;
    59         if (price != other.price)
    60             return false;
    61         return true;
    62     }
    63 
    64     @Override
    65     public String toString() {
    66         return "Book [name=" + name + ", price=" + price + "]";
    67     }
    68 
    69 }
  • 相关阅读:
    操作系统复习
    Google hack语法
    c++的set重载运算符
    华为笔试题
    Flume+Kafka整合
    kafka相关知识点总结
    kafka中生产者和消费者API
    Kafka集群环境搭建
    Storm消息容错机制(ack-fail机制)
    Storm通信机制(了解)
  • 原文地址:https://www.cnblogs.com/String-likainian/p/5824683.html
Copyright © 2020-2023  润新知