🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Introduction
In this blog post, we will explore how to use Java Stream's filter() method with multiple conditions. The Java Stream API is a powerful feature for processing and manipulating collections of objects in a concise and functional way. One of the most commonly used operations in Java Stream is the filter() method, which allows us to selectively include or exclude elements from a stream based on a specified condition.
While filtering based on a single condition is straightforward, there are situations where we need to apply multiple conditions to filter the data effectively. To filter a stream with multiple conditions, we can use lambda expressions or method references to define complex filtering predicates. These predicates can combine multiple conditions using logical operators such as && (AND) or || (OR).
Table of Contents
- Filter with Multiple
&&(AND) Conditions - Filter with Multiple
||(OR) Conditions - Combining
&&,||, and!Conditions - Filter with Multiple Conditions on Custom Objects
- Example 1: Filtering Products Based on Price and Category
- Example 2: Filtering Employees Based on Department and Salary Range
1. Filter with Multiple && (AND) Conditions
You can filter a stream by applying multiple conditions using the && operator, which requires that all conditions must be true for an element to pass the filter.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterWithAnd {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Filter numbers greater than 3 and less than 8
List<Integer> filteredNumbers = numbers.stream()
.filter(n -> n > 3 && n < 8)
.collect(Collectors.toList());
System.out.println(filteredNumbers);
}
}
Output
[4, 5, 6, 7]
2. Filter with Multiple || (OR) Conditions
The || operator allows you to filter elements based on multiple conditions where at least one condition must be true for an element to pass the filter.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterWithOr {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Filter numbers less than 3 or greater than 8
List<Integer> filteredNumbers = numbers.stream()
.filter(n -> n < 3 || n > 8)
.collect(Collectors.toList());
System.out.println(filteredNumbers);
}
}
Output
[1, 2, 9, 10]
3. Combining &&, ||, and ! Conditions
You can combine multiple logical operators (&&, ||, and !) to create more complex filtering logic.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterWithComplexConditions {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Filter numbers greater than 3 and less than 8, or numbers equal to 10
List<Integer> filteredNumbers = numbers.stream()
.filter(n -> (n > 3 && n < 8) || n == 10)
.collect(Collectors.toList());
System.out.println(filteredNumbers);
}
}
Output
[4, 5, 6, 7, 10]
4. Filter with Multiple Conditions on Custom Objects
You can apply multiple conditions to filter custom objects based on their attributes.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterCustomObjects {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Amit", 25),
new Person("Rahul", 35),
new Person("Deepa", 30),
new Person("Suresh", 40)
);
// Filter people whose name starts with "A" and are younger than 30
List<Person> filteredPeople = people.stream()
.filter(p -> p.getName().startsWith("A") && p.getAge() < 30)
.collect(Collectors.toList());
filteredPeople.forEach(System.out::println);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
Output
Amit (25)
5. Real-Time Example 1: Filtering Products Based on Price and Category
In this example, we filter the stream of Product objects by checking if the category is "Electronics" and the price is greater than $500.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Product {
private String name;
private double price;
private String category;
public Product(String name, double price, String category) {
this.name = name;
this.price = price;
this.category = category;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getCategory() {
return category;
}
public static void main(String[] args) {
List<Product> products = Arrays.asList(
new Product("Laptop", 1200.0, "Electronics"),
new Product("Smartphone", 800.0, "Electronics"),
new Product("Shirt", 30.0, "Fashion"),
new Product("TV", 900.0, "Electronics")
);
// Filter products with category "Electronics" and price > 500
List<Product> filteredProducts = products.stream()
.filter(product -> product.getCategory().equals("Electronics") && product.getPrice() > 500.0)
.collect(Collectors.toList());
filteredProducts.forEach(product -> System.out.println(product.getName()));
}
}
Output
Laptop
Smartphone
TV
6. Real-Time Example 2: Filtering Employees Based on Department and Salary Range
In this example, we filter the stream of Employee objects based on multiple conditions: department being "Sales" and salary falling between $3000 and $5000.
Code Example
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Employee {
private String name;
private String department;
private double salary;
public Employee(String name, String department, double salary) {
this.name = name;
this.department = department;
this.salary = salary;
}
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public double getSalary() {
return salary;
}
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("John", "Sales", 4000.0),
new Employee("Alice", "Marketing", 4500.0),
new Employee("Bob", "Sales", 5500.0),
new Employee("Jane", "HR", 3000.0)
);
// Filter employees in "Sales" department with salary between 3000 and 5000
List<Employee> filteredEmployees = employees.stream()
.filter(emp -> emp.getDepartment().equals("Sales") && emp.getSalary() >= 3000.0 && emp.getSalary() <= 5000.0)
.collect(Collectors.toList());
filteredEmployees.forEach(emp -> System.out.println(emp.getName()));
}
}
Output
John
Conclusion
The filter() method in Java Streams is used for applying multiple conditions to filter elements in a stream. By using logical operators such as &&, ||, and !, we can define complex predicates for filtering data based on specific criteria. Whether you're filtering simple collections or custom objects, Java Streams make this process both concise and expressive.
My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment