Java 8 根据元素属性谓词 select 列表中的元素

Java 8 Predicate to select an element from list based on element properties

有一个员工对象列表,每个员工对象都有 属性 开始日期。 任务是 select 只有一名有最早开始日期的员工。 我正在尝试为此使用 Java 8 谓词。 那么基本上我如何在 predicate 中比较列表元素? 我如何使用带有功能接口的 lambda 做同样的事情?

Java Predicates 是基于 Predicate 的数学概念,Predicate 是一个函数 F(x) returns true 或 false 基于 x 的某些属性。鉴于在遍历集合时无法重新定义该函数,它可能不是查找某个集合的最小值或最大值的首选选项。

使用 Java 8 的推荐方法是使用 Java Streams 中包含的 min 函数。

Employee oldestEmployee = employees.stream().min(Comparator.comparing(Employee::getStartDate)).get()

假设你有员工:

class Employee {
   private LocalDate startDate;
}

构造函数和getter被省略。您可以找到最早开始日期的员工如下:

Optional<Employee> min = list.stream()
            .min(Comparator.comparing(Employee::getStartDate));