当需要对一个对象数组进行排序时,Arrays.sort
方法需要一个Comparator
接口实例来指定排序的规则。假设有一个Person
类,含有String name
和int age
两个成员变量:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
传统写法
如果使用传统的代码对Person[]
数组进行排序,写法如下:
import java.util.Arrays;
import java.util.Comparator;
public class Main{
public static void main(String[] args) {
Person[] array = {
new Person("梦琪", 19),
new Person("尔岚", 18),
new Person("元香", 20)
};
Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.getAge() - o1.getAge();
}
};
Arrays.sort(array,comparator);
for (Person person : array) {
System.out.println(person);
}
}
}
这种做法在面向对象的思想中,似乎也是“理所当然”的。其中Comparator
接口的实例(使用了匿名内部类)代表了“按照年龄从小到大”的排序规则。
Lambda写法
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
Person[] array = {
new Person("初夏", 19),
new Person("沛菡", 18),
new Person("傲珊", 20)};
Arrays.sort(array, (Person a, Person b) -> {
return b.getAge() - a.getAge();
});
for (Person person : array) {
System.out.println(person);
}
}
}
学习一下Lambda还是可以省略不少代码的,在不懂Lambda的人眼里显得厉害一点