$show=/label

Java 8 Streams Filter With Multiple Conditions Examples

SHARE:

A quick guide to java 8 streams filtering concept with multiple conditions. This demonstrates how to use filter() in a more advanced way with examples

1. Overview


In this tutorial, We'll learn how to utilise stream filter() with several filter conditions (can be more than one condition).

Normally, we apply a single condition to streams using filter() method with lambda and then store the results in Lists or Sets.

However, we'll learn how to use the filter() method with as many condition filters as we require.

More filters can be applied in a variety of methods, such as using the filter() method twice or supplying another predicate to the Predicate.and() method.

In the next sections, we'll look at examples with single and multiple conditions.

GitHub link is given at the end of the article for the shown examples.

Java 8 Streams Filter With Multiple Conditions Examples





2. Stream.filter() with Single Condition


First, We'll start by looking at how to apply the single filter condition to java streams.

Predicate is passed as an argument to the filter() method. Each value in the stream is evaluated to this predicate logic.

There are only a few methods in Predicate functional interface, such as and(), or(), or negate(), and isEquals().
package com.javaprogramto.java8.streams.filter;

import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Example to filter the steam with single condition.
 * 
 * @author javaprogramto.com
 *
 */
public class FilterSingleCondition {

	public static void main(String[] args) {

		System.out.println("Fruites stream : " + getStream().collect(Collectors.toList()));

		// filter 1
		Predicate<String> nofruitWordFilter = name -> !name.contains("fruit");

		List<String> filteredList1 = getStream().filter(nofruitWordFilter).collect(Collectors.toList());

		System.out.println("filteredList 1 : " + filteredList1);

		// filter 1
		Predicate<String> noLetterOFilter = name -> !name.contains("o");

		List<String> noLetterOFilterList = getStream().filter(noLetterOFilter).collect(Collectors.toList());

		System.out.println("noLetterOFilterList : " + noLetterOFilterList);

	}

	// creating the stream of strings.
	private static Stream<String> getStream() {
		Stream<String> fruitesStream = Stream.of("mango", "grapes", "apple", "papaya", "jack fruit", "dragon fruit");
		return fruitesStream;

	}

}
 

Output:
Fruites stream : [mango, grapes, apple, papaya, jack fruit, dragon fruit]
filteredList 1 : [mango, grapes, apple, papaya]
noLetterOFilterList : [grapes, apple, papaya, jack fruit]

 
In the preceding example, we generated two predicate filters but only applied one of them to the stream at a time.

And it has generated two distinct outputs, which you should carefully examine.


3. Stream.filter() - Java 8 Stream Filter Multiple Parameters or Conditions


In the previous section, we have seen how to create a filter in java for stream

Next, we'll attempt two different approaches of applying many conditions to a stream.

3.1 Invoking the filter() method on the stream multiple times


Take a look at the results after using the filter() method twice with different predicates criteria.
package com.javaprogramto.java8.streams.filter;

import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Example to filter the steam with multiple conditions.
 * 
 * @author javaprogramto.com
 *
 */
public class FilterMultipleCondition {

	public static void main(String[] args) {

		System.out.println("Fruites stream : " + getStream().collect(Collectors.toList()));

		// filter 1
		Predicate<String> nofruitWordFilter = name -> !name.contains("fruit");

		// filter 2
		Predicate<String> noLetterOFilter = name -> !name.contains("o");

		// to remove the fruites with word "fruit" and with letter "o".
		List<String> result = getStream().filter(nofruitWordFilter)
				.filter(noLetterOFilter)
				.collect(Collectors.toList());

		// printing the final result
		System.out.println("Final result : " + result);

	}

	// creating the stream of strings.
	private static Stream<String> getStream() {
		Stream<String> fruitesStream = Stream.of("mango", "grapes", "apple", "papaya", "jack fruit", "dragon fruit");
		return fruitesStream;

	}

}
 

Output:
Fruites stream : [mango, grapes, apple, papaya, jack fruit, dragon fruit]
Final result : [grapes, apple, papaya]

 

3.2 Invoking Predicate.and() method with two conditions


Let's utilise the method firstPredicate.and(secondPredicate) now. Pass the second predicate as a parameter to the and() function on the first predicate.
This signifies that the first predicate receives each instance from the stream. If the first predicate returns true, the second predicate receives the same value.

Finally, the result of the filter() method will be satisfied by the first and second predicate's.

You can also use p1.and(p2.and(p3) to call with multiple predicates.
List<String> andPredicateResult = getStream().filter(nofruitWordFilter
		.and(noLetterOFilter))
		.collect(Collectors.toList());

System.out.println("andPredicateResult : "+andPredicateResult);
 
Output:
 andPredicateResult : [grapes, apple, papaya]

When you call the filter() method several times and the predicate.and() method, the results are the same. However, it is recommended that you use the predicate and() method as needed.

this is similar to grouping the multiple conditions into the single conditions as a single predicate to filter() method.

You can use predicate or() or isEquals() methods with the multiple predicate conditions.

4. Conclusion


You learned how to use the filter() method and the predicate and() method to add multiple conditions to stream objects in this article.


COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java 8 Streams Filter With Multiple Conditions Examples
Java 8 Streams Filter With Multiple Conditions Examples
A quick guide to java 8 streams filtering concept with multiple conditions. This demonstrates how to use filter() in a more advanced way with examples
https://blogger.googleusercontent.com/img/a/AVvXsEiLiQXFzEf0DfdBz4u_TFRIxJXlEVJpRymKGmySNgS7rTzI8VlPVZBFQF_fDxzTbjvfHPII7DD4VS3ywvFyrkdX1UNlDPRJ8UHboQ4s1HzmZSg6ZoRj3ojBoxEMVZP-He-YL1u0NlViWaAhC2Ny6QA4AR2jdLGm_1mIBHBCQ-teEwOMLsbN2Ti6nidR=w400-h224
https://blogger.googleusercontent.com/img/a/AVvXsEiLiQXFzEf0DfdBz4u_TFRIxJXlEVJpRymKGmySNgS7rTzI8VlPVZBFQF_fDxzTbjvfHPII7DD4VS3ywvFyrkdX1UNlDPRJ8UHboQ4s1HzmZSg6ZoRj3ojBoxEMVZP-He-YL1u0NlViWaAhC2Ny6QA4AR2jdLGm_1mIBHBCQ-teEwOMLsbN2Ti6nidR=s72-w400-c-h224
JavaProgramTo.com
https://www.javaprogramto.com/2021/06/java-8-streams-filter-multiple-conditions.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2021/06/java-8-streams-filter-multiple-conditions.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content