Java 8 的Comparator排序用法示例
时间: 2024-03-02 14:49:58 浏览: 78
Java 8 中的 Comparator 接口提供了很多新的方法,包括 reversed()、thenComparing()、nullsFirst() 和 nullsLast() 等方法,可以更方便地实现自定义排序。
下面是一个使用 Comparator 接口的示例,对一个列表中的 Person 对象进行排序:
```java
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 20));
persons.add(new Person("Charlie", 30));
// 使用 Comparator 接口的默认方法进行排序
Comparator<Person> comparator = Comparator.comparing(Person::getAge);
persons.sort(comparator);
// 使用 Comparator 接口的 reversed() 方法进行倒序排序
comparator = comparator.reversed();
persons.sort(comparator);
// 使用 Comparator 接口的 thenComparing() 方法进行多级排序
comparator = Comparator.comparing(Person::getAge)
.thenComparing(Person::getName);
persons.sort(comparator);
// 使用 Comparator 接口的 nullsFirst() 和 nullsLast() 方法处理 null 值
persons.add(null);
comparator = Comparator.nullsFirst(Comparator.comparing(Person::getName));
persons.sort(comparator);
}
}
```
在上面的示例中,我们首先定义了一个 Person 类,然后创建了一个包含多个 Person 对象的列表。接下来,我们使用 Comparator 接口的默认方法 `comparing()`,按照年龄对 Person 对象进行排序,然后通过 `reversed()` 方法对排序结果进行倒序处理。接着,我们使用 `thenComparing()` 方法对排序结果进行多级排序,先按照年龄排序,再按照姓名排序。最后,我们使用 `nullsFirst()` 和 `nullsLast()` 方法处理空值,将空值放在排序结果的最前面或最后面。
阅读全文