Java 8 Predicate Chaining using and() or() and negate() Methods


We can chain instances of Predicate functional interfaces together to create complex conditions by using methods and(), or(), and negate().

Let's take a look with an example.

package org.code2care.examples;

import java.util.function.Predicate;

public class Java8PredicateChainingExample {

    public static void main(String... args) {

        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isPositive = num -> num > 0;

        //Chaining using and() or() and negate()
        Predicate<Integer> isEvenAndPositive = isEven.and(isPositive);
        Predicate<Integer> isEvenOrPositive = isEven.or(isPositive);
        Predicate<Integer> isNotEven = isEven.negate();

        int testNumber1 = 16;
        int testNumber2 = -13;

        boolean result1 = isEvenAndPositive.test(testNumber1);
        boolean result2 = isEvenAndPositive.test(testNumber2);

        boolean result3 = isEvenOrPositive.test(testNumber1);
        boolean result4 = isEvenOrPositive.test(testNumber2);

        boolean result5 = isNotEven.test(testNumber1);

        System.out.println(testNumber1 + " is even and positive: " + result1);
        System.out.println(testNumber2 + " is even and positive: " + result2);
        System.out.println(testNumber1 + " is even or positive: " + result3);
        System.out.println(testNumber2 + " is even or positive: " + result4);
        System.out.println(testNumber1 + " is not even: " + result5);
    }
}
Output:

16 is even and positive: true
-13 is even and positive: false
16 is even or positive: true
-13 is even or positive: false
16 is not even: false

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright © Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap