Java 8 Matching with Streams | allMatch, anyMatch, noneMatch methods tutorial with examples
Introduction
Java 8 Matching with Streams tutorial explains how to match elements in a stream using the
I.e. once you define the condition using a Predicate instance, and provide this Predicate as an input to the matching methods, then Java 8 processes the matching function internally and provides you with the result whether a match for the condition was found or not.
Java 8 provides such declarative matching with predicate conditions using three methods defined on the Streams API which are -
Definition of
Where,
- input is
-
The below code shows how to use the
OUTPUT of the above code
Explanation of the code
Definition of
Where,
- input is
-
The below code shows how to use the
(Note - The
OUTPUT of the above code
Explanation of the code
Definition of
Where,
- input is
-
The below code shows how to use the
(Note - The
OUTPUT of the above code
Explanation of the code
allMatch(), anyMatch() and noneMatch() methods provided by the Streams API with examples to show their usage. This tutorial assumes that you are familiar with basics of Java 8 Streams APIRead Basics of Java 8 Streams API.
What is 'matching' in the context of Streams
Given a stream of objects, many-a-times we need to check whether object(s) in the given stream match a specific criteria. Instead of writing logic for iterating over the stream elements and checking each object whether it matches the criteria (which is more of an imperative rather than functionalClick to understand the difference between the two programming styles style of programming), Java 8 Streams allow declarative matching of objects in the stream.I.e. once you define the condition using a Predicate instance, and provide this Predicate as an input to the matching methods, then Java 8 processes the matching function internally and provides you with the result whether a match for the condition was found or not.
Java 8 provides such declarative matching with predicate conditions using three methods defined on the Streams API which are -
allMatch(), anyMatch() and noneMatch().
Stream.allMatch() method
Stream.allMatch() method returns true if all the elements of the stream match the provided predicate condition. If even one of the elements does not match the predicate condition then the method skips the testing of the remaining elements using the concept of short-circuit evaluationClick to read in-depth article on Short-Circuits in Programming and returns false as the result. This is a terminalClick to Read Tutorial explaining intermediate & terminal Stream operations stream operation.allMatch() Method - The Stream.allMatch() method has the following signature -
boolean allMatch(Predicate<? super T> predicate)- input is
predicate which is an instance of a Predicate Functional InterfaceClick to read detailed tutorial on Predicate Functional Interfaces-
boolean value is returned indicating whether all elements of the stream match the predicate or not.The below code shows how to use the
allMatch() method in your code.Java 8 code showing Stream.allMatch() method usage
package com.javabrahman.java8;
public class Employee{
private String name;
private Integer age;
public Employee(String name, Integer age){
this.name=name;
this.age=age;
}
//getters and setters for name and age attributes go here
//overridden equals() and hashcode() go here
public String toString(){
return "Employee Name:"+this.name
+" Age:"+this.age;
}
}
//MatchingWithStreams.java
public class MatchingWithStreams {
static List<Employee> employeeList = Arrays.asList(new Employee("Tom Jones", 45),
new Employee("Harry Major", 25),
new Employee("Ethan Hardy", 65),
new Employee("Nancy Smith", 22),
new Employee("Deborah Sprightly", 29));
public static void main(String[] args) {
boolean allEmpAbove21 = employeeList.stream()
.allMatch(emp -> emp.getAge() > 21);
System.out.println("All employees are above 21:" + allEmpAbove21);
}
}
All employees are above 21:true
Employeeis the class of which we will be creating aStream. It has two main attributes -nameandage.employeeListis a static list of 5Employees.- In the
main()method we create aStreamofEmployees using thestream()method ofListinterface. - On the stream of Employees we call the
allMatch()method with thePredicateinstance being specified as its equivalent lambda expressionClick to read tutorial on Java 8 Lambda Expressions -emp -> emp.getAge() > 21. This predicate condition states that the Employee's age should be greater than 21 years. - Since, all the employees are of age greater than 21 years, so the
Predicateis satisfied for all theEmployees, and theallMatch()method returnstrue.
Stream.anyMatch() method
Stream.anyMatch() method returns true if at least 1 of the elements of the stream match the provided predicate condition. If none of the elements match the predicate condition then the method returns false. The moment this method finds the first element satisfying the predicate, it skips the testing of the remaining elements using the concept of short-circuit evaluation and returns true as the result. This is a terminal stream operation.Definition of
anyMatch() Method - The Stream.anyMatch() method has the following signature -
boolean anyMatch(Predicate<? super T> predicate)- input is
predicate which is an instance of a Predicate Functional Interface-
boolean value is returned indicating whether any of the elements of the stream match the predicate or not.The below code shows how to use the
anyMatch() method in your code.(Note - The
Employee class and employeeList objects with their values remain the same as the previous code usage example and hence are not shown below for brevity.)Java 8 code showing Stream.anyMatch() method usage
public static void main(String[] args) {
boolean empAbove40 = employeeList.stream()
.anyMatch(emp -> emp.getAge() > 40);
System.out.println("Any employee is above 40:" + empAbove40);
}
Any employee is above 40:true
- In the
main()method we create aStreamofEmployees using thestream()method ofListinterface. - On the stream of Employees we call the
anyMatch()method with thePredicateinstance being specified as its equivalent lambda expression -emp -> emp.getAge() > 40. This predicate condition states that the Employee's age should be greater than 40 years. - Since, there are 2 employees of age greater than 40 years, the predicate is satisfied and the
anyMatch()method returnstrue.
Stream.noneMatch() method
Stream.noneMatch() method returns true if none of the elements of the stream match the provided predicate condition. If one (or more) of the elements match the predicate condition then the method returns false. The moment this method finds the first element satisfying the predicate, it skips the testing of the remaining elements using the concept of short-circuit evaluation and returns false as the result. This is a terminal stream operation.Definition of
noneMatch() Method - The Stream.noneMatch() method has the following signature -
boolean noneMatch(Predicate<? super T> predicate)- input is
predicate which is an instance of a Predicate Functional Interface-
boolean value is returned indicating whether none of the elements of the stream match the predicate.noneMatch() method in your code.(Note - The
Employee class and employeeList objects with their values remain the same as the previous code usage example and hence are not shown below for brevity.)Java 8 code showing Stream.noneMatch() method usage
public static void main(String[] args) {
boolean noEmpBelow30 = employeeList.stream()
.noneMatch(emp -> emp.getAge() < 30);
System.out.println("No employee is below 30:" + noEmpBelow30);
}
No employee is below 30:false
- In the
main()method we create aStreamofEmployees using thestream()method ofListinterface. - On the stream of Employees we call the
noneMatch()method with thePredicateinstance being specified as its equivalent lambda expression -emp -> emp.getAge() < 30. This predicate condition states that the Employee's age should be less than 30 years. - Since, there are 3 employees of age less than 30 years, the
noneMatch()method returnsfalse. For the method to returntrue- none of the employees in theemployeeListshould have age less than 30 years.
allMatch(), anyMatch() and noneMatch().Java 8 Streams API tutorials on JavaBrahman
Streams API - Introduction & BasicsClick to Read tutorial on Streams API Basics Understanding Stream Operations | Intermediate and Terminal OperationsClick to Read Tutorial on Stream Operations Overview Mapping with Streams using map and flatMap methodsClick to Read how Mapping with Java8 Streams works Filtering and Slicing with Streams using filter,distinct,limit,skip methodsClick to Read how Filtering and Slicing with Java8 Streams works Matching with Streams using allMatch,anyMatch,noneMatch methodsClick to Read tutorial on matching with Streams API Stream API's findFirst,findAny methods' tutorialClick to Read tutorial on findFirst() and findAny() methods of Streams API 'Peeking' into a running Stream with Stream.peek() methodClick to Read tutorial on Stream.peek() method Creating Infinite Streams with iterate\generate methodsClick to Read tutorial on Creating Infinite Streams Reducing Streams using Streams.reduce methodClick to Read tutorial on Reducing Streams
Streams API - Introduction & BasicsClick to Read tutorial on Streams API Basics Understanding Stream Operations | Intermediate and Terminal OperationsClick to Read Tutorial on Stream Operations Overview Mapping with Streams using map and flatMap methodsClick to Read how Mapping with Java8 Streams works Filtering and Slicing with Streams using filter,distinct,limit,skip methodsClick to Read how Filtering and Slicing with Java8 Streams works Matching with Streams using allMatch,anyMatch,noneMatch methodsClick to Read tutorial on matching with Streams API Stream API's findFirst,findAny methods' tutorialClick to Read tutorial on findFirst() and findAny() methods of Streams API 'Peeking' into a running Stream with Stream.peek() methodClick to Read tutorial on Stream.peek() method Creating Infinite Streams with iterate\generate methodsClick to Read tutorial on Creating Infinite Streams Reducing Streams using Streams.reduce methodClick to Read tutorial on Reducing Streams