[个人原创]关于java中对象排序的一些探讨(三)

这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/

对对象排序也可以使用Guava中的Ordering类。

构造Ordering类,可以使用直接实现Ordering类中comparator方法,也可以由from()方法传入一个比较器,具体可以参考Guava文档。

 1 package Test;
 2 
 3 import com.google.common.base.Function;
 4 import com.google.common.collect.Ordering;
 5 
 6 import java.util.ArrayList;
 7 import java.util.Comparator;
 8 import java.util.List;
 9 
10 /**
11  * Created By IntelliJ IDEA
12  * User:LeeShuai
13  * Date:3/6/14
14  * Time:9:29 PM
15  */
16 class Person {
17     private  String name;
18     private  int age;
19 
20     //构造器
21     public Person() {
22     }
23 
24     public Person(String name, int age) {
25         this.setAge(age);
26         this.setName(name);
27     }
28 
29     public int getAge() {
30         return age;
31     }
32 
33     public void setAge(int age) {
34         this.age = age;
35     }
36 
37 
38     public String getName() {
39         return name;
40     }
41 
42     public void setName(String name) {
43         this.name = name;
44     }
45 
46 }
47 public class OrderingTest {
48     public static void main(String[] args) {
49 
50         //直接实现抽象类
51       Ordering<Person> ordering=new Ordering<Person>() {
52           @Override
53           public int compare(Person o1,Person o2) {
54              return o2.getAge()>o1.getAge()? 1:(o2.getAge()<o1.getAge()?
55                      -1:(o2.getName().compareTo(o1.getName())));
56           }
57       };
58 
59         //由一个比较器实现
60         Ordering<Person> ordering1=Ordering.from(new Comparator<Person>() {
61             @Override
62             public int compare(Person o1, Person o2) {
63                 return o2.getAge()>o1.getAge()? 1:(o2.getAge()<o1.getAge()?
64                         -1:(o2.getName().compareTo(o1.getName())));
65 
66             }
67         });
68         //带函数参数的Ordering
69             Ordering<Person> ordering2=Ordering.from(new Comparator<String>() {
70             @Override
71             public int compare(String o1, String o2) {
72                 return o2.compareTo(o1);
73             }
74         }).onResultOf(new Function<Person, String>() {
75             @Override
76             public String apply(Person person) {
77                 return person.getName();
78             }
79         });
80 
81         List<Person> list=new ArrayList<Person>();
82         list.add(new Person("a", 24));
83         list.add(new Person("b", 23));
84         list.add(new Person("c", 22));
85         list.add(new Person("d", 21));
86         list.add(new Person("e", 20));
87         list.add(new Person("f", 19));
88 
89         ordering2.sortedCopy(list);
90         for(Person person:list){
91             System.out.println(person.getName()+":"+person.getAge ());
92         }
93 
94     }
95 
96 }

输出结果不再给出。

原文地址:https://www.cnblogs.com/shibazijiang/p/3586347.html