📜  java 列表排序比较器日期降序 lambda - Java (1)

📅  最后修改于: 2023-12-03 15:31:33.161000             🧑  作者: Mango

Java 列表排序比较器日期降序 Lambda

在 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 表达式,我们可以大大简化我们的代码,使其更易读和维护。