原创

JAVA8系列教程-谓词过滤器

温馨提示:
本文最后更新于 2020年04月21日,已超过 1,257 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

在数学中,谓词通常被理解为布尔值函数 'P: X? {true, false}',称为X上的谓词。它可以被认为是操作员或函数返回一个值,该值是任一truefalse

Java 8谓词用法

在Java 8中,谓词功能接口,因此可以用作lambda表达式或方法引用的分配目标因此,在您认为的地方,我们可以在日常编程中使用这些true / false返回函数吗?我会说,您可以在需要评估类似对象的组/集合上的条件的任何地方使用谓词,以便评估可以得出true或false。

例如,您可以在这些实时用例中使用prdicates

  1. 查找在特定日期之后出生的所有孩子
  2. 披萨定下特定时间
  3. 员工超过一定年龄等

因此,java谓词似乎是一件有趣的事情。让我们更深入。

如我所说,Predicate功能接口这意味着我们可以在需要谓词的任何地方传递lambda表达式。例如,一种这样的方法是filter()来自Stream接口的方法

/**
 * Returns a stream consisting of the elements of this stream that match
 * the given predicate.
 *
 * <p>This is an <a href="package-summary.html#StreamOps">intermediate
 * operation</a>.
 *
 * @param predicate a non-interfering stateless predicate to apply to each element to determine if it
 * should be included in the new returned stream.
 * @return the new stream
 */
Stream<T> filter(Predicate<? super T> predicate);

我们可以将流假定为一种机制,以创建支持顺序和并行聚合操作的元素序列。这意味着我们可以随时通过一次调用收集并执行流中存在的所有元素的某些操作。

因此,从本质上讲,我们可以使用流和谓词来–

  • 首先从组中过滤某些元素,然后
  • 然后对过滤后的元素执行一些操作。

在集合上使用谓词

为了演示,我们有一个Employee如下类:

Employee.java
package predicateExample;
 
public class Employee {
    
   public Employee(Integer id, Integer age, String gender, String fName, String lName){
       this.id = id;
       this.age = age;
       this.gender = gender;