- A predicate is a functional interface with abstract method test()
- boolean test(T t);
- Represents a boolean value function i.e takes one argument and returns false
- Can be used with lambda expression
- Examples
- Filtering a list of collections using stream
- Stream<T> filter(Predicate<? super T> predicate);
- Filtering a list of collections using stream
- Examples
- Can be used instead of If else
- Types of Predicate
Predicate is used in Stream filter

Predicate as a variable

Combining Predicates

Combining Predicates using and

Combining Predicates using or

Predicate with negate

Predicate as an argument to a utility stream

Predicate instead of If else

Creating Helper Class with Predicate
- helper classes are classes that contain static functions to support a class
- We can create functions using java 8 which accept a predicate i.e the function accept a logic instead of a variable or an object
- Example Below
public class Hosting { private int Id; private String name; private String url; public Hosting(int id, String name, String url) { Id = id; this.name = name; this.url = url; } //... getters and setters, toString() }
import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class HostingRespository { public static List<Hosting> filterHosting(List<Hosting> hosting, Predicate<Hosting> predicate) { return hosting.stream() .filter(predicate) .collect(Collectors.toList()); } }
public class Java8Predicate7 { public static void main(String[] args) { Hosting h1 = new Hosting(1, "amazon", "aws.amazon.com"); Hosting h2 = new Hosting(2, "linode", "linode.com"); Hosting h3 = new Hosting(3, "liquidweb", "liquidweb.com"); Hosting h4 = new Hosting(4, "google", "google.com"); List<Hosting> list = Arrays.asList(new Hosting[]{h1, h2, h3, h4}); List<Hosting> result = HostingRespository.filterHosting(list, x -> x.getName().startsWith("g")); System.out.println("result : " + result); // google List<Hosting> result2 = HostingRespository.filterHosting(list, isDeveloperFriendly()); System.out.println("result2 : " + result2); // linode } public static Predicate<Hosting> isDeveloperFriendly() { return n -> n.getName().equals("linode"); } }
Reference :