Java 8谓词,用于根据元素属性从列表中选择元素

时间:2017-10-24 14:27:22

标签: java lambda predicate functional-interface

有一个List Employee对象,每个雇员对象都有属性开始日期。 任务是仅选择一个具有最早开始日期的员工。 我正在尝试使用Java 8 Predicate。 那么基本上如何在谓词中将列表元素相互比较呢? 如何使用带有Functional接口的lambda来做同样的事情?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

假设您有员工:

class Employee {
   private LocalDate startDate;
}

省略了构造函数和getter。您可以按如下方式找到具有最早startDate的员工:

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