这可能是题外话,但是如果您想尝试一些很酷的东西,JDK 8 Lambda Preview提供了一些很酷的方法来使用Lamda 表达式和方法引用来定义比较器。
假设我们有一个类:
class Jedi {
private final String name;
private final int age;
//...
}
然后是它们的集合:
List<Jedi> jediAcademy = asList(new Jedi("Obiwan",80), new Jedi("Anakin", 30));
sort(jediAcademy, (j1, j2) -> j1.getAge() > j2.getAge() ? 1 : j1.getAge() < j2.getAge() ? -1 : 0);
System.out.println(jediAcademy); //Anakin, Obiwan
或者使用方法引用,假设 Jedi 具有充当比较器的方法(相同的签名)
class Jedi {
public static int compareByAge(Jedi first, Jedi second){
return first.age > second.age ? 1 : first.age < second.age ? -1 : 0;
}
//...
}
可以如下使用方法引用来生成比较器:
List<Jedi> jediAcademy = asList(new Jedi("Obiwan",80), new Jedi("Anakin", 30));
sort(jediAcademy, Jedi::compareByAge);
System.out.println(jediAcademy);//Anakin, Obiwan