java 17 - 8 TressSet比较器排序元素

 1 package zl_TreeSet;
 2 
 3 import java.util.Comparator;
 4 import java.util.TreeSet;
 5 
 6 /*
 7  用StreeSet集合存储自定义对象并遍历。这次用比较器排序
 8  public TreeSet(Comparator comparator) 比较器排序
 9  这种方法有两种做法:
10  1:创建一个把Comparator为接口的类,
11  2:如果一个方法的参数是接口,那么真正要的是接口的实现类的对象
12  而匿名内部类就可以实现这个东西
13 
14  (  new 类名或者接口名(){
15  重写方法;
16  }  );
17 
18  创建TreeSet集合,添加动物对象,按照以下规则进行排序:
19  品种名字长度短的在前面
20  */
21 public class TreeSetDemo2 {
22 
23     public static void main(String[] args) {
24         // public TreeSet(Comparator comparator) 比较器排序
25         // 方式1:创建一个把Comparator为接口的类,然后进行创建
26         // TreeSet<Person> ts = new TreeSet<Person>(new MyComparator());
27 
28         // 方式2:内部匿名类
29         TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() {
30             public int compare(Person a1, Person a2) {
31 
32                 // 对比名字长度
33                 int num1 = a1.getName().length() - a2.getName().length();
34 
35                 // 长度相同,则再对比名字内容
36                 int num2 = num1 == 0 ? a1.getName().compareTo(a2.getName())
37                         : num1;
38 
39                 // 名字完全一样,再进行省份长度判断
40                 int num3 = num2 == 0 ? a1.getState().length()
41                         - a2.getState().length() : num2;
42 
43                 // 省份长度也一样,再进行内容比较
44                 int num4 = num3 == 0 ? a1.getState().compareTo(a2.getState())
45                         : num3;
46 
47                 // 上面都一样,就进行年龄比较
48                 int num5 = num4 == 0 ? a1.getAge() - a2.getAge() : num4;
49 
50                 return num5;
51             }
52         });
53 
54         // 创建自定义对象
55         Person p1 = new Person("熊大", "东北", 21);
56         Person p2 = new Person("熊二", "四川", 17);
57         Person p3 = new Person("熊大", "福建", 21);
58         Person p4 = new Person("熊大", "福建", 20);
59         Person p5 = new Person("熊二", "广东", 17);
60         Person p6 = new Person("熊大", "东北", 21);
61         Person p7 = new Person("熊大", "福建", 21);
62 
63         // 添加进集合
64         ts.add(p1);
65         ts.add(p2);
66         ts.add(p3);
67         ts.add(p4);
68         ts.add(p5);
69         ts.add(p6);
70         ts.add(p7);
71 
72         // 进行遍历
73         for (Person p : ts) {
74             System.out.println(p.getName() + "\t" + p.getState() + "\t"
75                     + p.getAge());
76         }
77 
78     }
79 
80 }

 

posted @ 2016-09-24 21:43  卡拉瓦  阅读(390)  评论(0编辑  收藏  举报