# Introduction

In Mathematics, a predicate is a boolean-valued function that returns 1or 0, i.e., true or false. Java leveraged the mathematical concept of the predicate and introduced the `Predicate` interface in Java 8.

A Boolean-valued function is a function of the type f : X → B, where X is an arbitrary set and where B is a Boolean domain, whose elements are interpreted as logical values, for example, 0 = false and 1 = true.
Wikipedia

# Predicate

`Predicate` is a functional interface in Java that accepts exactly one input and can return a `boolean` value. Before going into it, we first need to understand the Functional Interface.

## Functional Interface

A functional interface is an interface that contains exactly one abstract method. It is also called Single Abstract Method (SAM) Interfaces. In Java, an interface is made functional by annotating it with `@FunctionalInterface.`

We know that predicate accepts an input and returns a boolean value. But where is it used? The predicate can be used wherever a boolean output is expected—Eg. Stream’s filter method.

## Example

Let's create the `Employee` class with the fields `id` , `name` , `age` , `gender` , and `role` .

Now we want to filter the employees based on the below use cases.

• Employees who are Male and age greater than 25
• Employees who are Female and are Managers.

We will create two predicates for the above use cases.

We can pass the above predicates to the `filter()` method to filter the employees based on the predicate's result.

Output

`Male and age greater than 25Id: 2, Name: Steve Rogers, Age: 28, Gender: MALE, Role: MANAGERFemale and ManagerId: 3, Name: Natasha Romanoff, Age: 23, Gender: FEMALE, Role: MANAGER`

# Predicate Composition

Multiple predicates can be composed together to form a chain of predicates. The composition is done with built-in methods. `and()`, `or()` , `negate()` and `isEqual()` .

## and()

Returns `true` only if all the predicates return, else `false`. It is equivalent to logical AND.

## or()

Returns `true` if any of the predicates return, else `false`. It is equivalent to logical OR.

## negate()

Returns `true` if the predicate returns `false` and vice versa. It is equivalent to logical NOT.

## isEqual()

Returns a predicate that checks if two values are equal. The equality is decided using`Object.equals()` method.

Output

`and() operationtruefalseor() operationtruetruenegate() operationfalseisEqual() operationtrue`

# BiPredicate

`BiPredicate` is a functional interface in Java that accepts two inputs and can return a `boolean` value. It is similar to the `Predicate` interface. The only difference is that it takes two inputs instead of one.

Output

`10 divisible by 2: true5 divisible by 3: false8 divisible by 4: true`

# Conclusion

• `Predicate` is a functional interface in Java that accepts a single input and can return a boolean value.
• `BiPredicate` is a functional interface in Java that accepts two inputs and can return a boolean value.
• `Predicate` and `BiPredicate` are usually used to apply in a filter for a collection of objects.

# Thank you 🤘

To know more about me, visit ganeshkumarm.me

--

--

SDE II at Amazon. ✍️ Content Writer 🔸 👨‍💻 Full Stack Engineer