📅  最后修改于: 2023-12-03 15:31:33.161000             🧑  作者: Mango
在 Java 中,我们可以使用 Comparator
接口来定义对象列表的排序规则。通过定义一个 Comparator
对象,我们可以指定对象列表按照我们指定的方式进行排序。在本文中,我们将介绍如何使用 Comparator
对象进行日期降序排序,并将使用 Java 8 引入的 Lambda 表达式来简化我们的代码。
我们从一个简单的 Person
类开始。该类包含一个 name
字符串和一个 birthDate
日期属性。
public class Person {
private String name;
private LocalDate birthDate;
public Person(String name, LocalDate birthDate) {
this.name = name;
this.birthDate = birthDate;
}
public String getName() {
return name;
}
public LocalDate getBirthDate() {
return birthDate;
}
}
接下来我们将使用一个 List
对象来存储多个 Person
对象。
List<Person> people = new ArrayList<>();
people.add(new Person("John", LocalDate.of(1980, 1, 1)));
people.add(new Person("Jane", LocalDate.of(1990, 5, 1)));
people.add(new Person("Bob", LocalDate.of(1970, 12, 1)));
people.add(new Person("Alice", LocalDate.of(1985, 10, 1)));
现在我们将使用 Comparator
对象来按照 birthDate
属性的降序排序:
Comparator<Person> descendingDateComparator = (p1, p2) -> p2.getBirthDate().compareTo(p1.getBirthDate());
Collections.sort(people, descendingDateComparator);
在这个例子中,我们创建了一个 Comparator
对象,该对象使用 Lambda 表达式来比较两个 Person
对象的 birthDate
属性。我们将第一个 Person
对象的 birthDate
属性与第二个 Person
对象的 birthDate
属性进行比较,并将比较结果的相反数返回,以便实现降序排序。最后,我们使用 Collections.sort()
方法来对 people
列表进行排序。
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("John", LocalDate.of(1980, 1, 1)));
people.add(new Person("Jane", LocalDate.of(1990, 5, 1)));
people.add(new Person("Bob", LocalDate.of(1970, 12, 1)));
people.add(new Person("Alice", LocalDate.of(1985, 10, 1)));
Comparator<Person> descendingDateComparator = (p1, p2) -> p2.getBirthDate().compareTo(p1.getBirthDate());
Collections.sort(people, descendingDateComparator);
System.out.println("Sorted People (descending birth date):");
people.forEach(p -> System.out.println(p.getName() + " - " + p.getBirthDate()));
}
}
class Person {
private String name;
private LocalDate birthDate;
public Person(String name, LocalDate birthDate) {
this.name = name;
this.birthDate = birthDate;
}
public String getName() {
return name;
}
public LocalDate getBirthDate() {
return birthDate;
}
}
在本文中,我们学习了如何使用 Comparator
接口和 Lambda 表达式来对 Java 对象列表进行排序。我们了解了如何定义一个 Comparator
对象来指定排序规则,并了解了如何使用 Collections.sort()
方法来执行实际的排序操作。通过使用 Lambda 表达式,我们可以大大简化我们的代码,使其更易读和维护。