这篇文章由十八子将原创,转载请注明,并标明博客地址: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 }
输出结果不再给出。
[个人原创]关于java中对象排序的一些探讨(三),布布扣,bubuko.com
原文:http://www.cnblogs.com/shibazijiang/p/3586347.html