Java Stream Filter

JavaJavaBeginner
Practice Now

Introduction

Java Streams provide us with a way to process data in an efficient and concise manner. The filter() method of Streams allows us to filter out elements from a given stream based on a condition or a predicate. In this lab, we will learn how to use the filter() method and filter elements from a stream in Java.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/StringManipulationGroup(["`String Manipulation`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/ProgrammingTechniquesGroup -.-> java/method_overriding("`Method Overriding`") java/ProgrammingTechniquesGroup -.-> java/scope("`Scope`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/annotation("`Annotation`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("`Generics`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/inner_classes("`Inner Classes`") java/FileandIOManagementGroup -.-> java/stream("`Stream`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_attributes("`Class Attributes`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("`Class Methods`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("`Constructors`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("`Encapsulation`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/modifiers("`Modifiers`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("`OOP`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("`Packages / API`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("`Wrapper Classes`") java/BasicSyntaxGroup -.-> java/identifier("`Identifier`") java/DataStructuresGroup -.-> java/arrays("`Arrays`") java/BasicSyntaxGroup -.-> java/comments("`Comments`") java/BasicSyntaxGroup -.-> java/data_types("`Data Types`") java/BasicSyntaxGroup -.-> java/operators("`Operators`") java/BasicSyntaxGroup -.-> java/output("`Output`") java/StringManipulationGroup -.-> java/strings("`Strings`") java/BasicSyntaxGroup -.-> java/variables("`Variables`") java/SystemandDataProcessingGroup -.-> java/object_methods("`Object Methods`") java/SystemandDataProcessingGroup -.-> java/system_methods("`System Methods`") subgraph Lab Skills java/method_overriding -.-> lab-117954{{"`Java Stream Filter`"}} java/scope -.-> lab-117954{{"`Java Stream Filter`"}} java/annotation -.-> lab-117954{{"`Java Stream Filter`"}} java/generics -.-> lab-117954{{"`Java Stream Filter`"}} java/inner_classes -.-> lab-117954{{"`Java Stream Filter`"}} java/stream -.-> lab-117954{{"`Java Stream Filter`"}} java/classes_objects -.-> lab-117954{{"`Java Stream Filter`"}} java/class_attributes -.-> lab-117954{{"`Java Stream Filter`"}} java/class_methods -.-> lab-117954{{"`Java Stream Filter`"}} java/constructors -.-> lab-117954{{"`Java Stream Filter`"}} java/encapsulation -.-> lab-117954{{"`Java Stream Filter`"}} java/modifiers -.-> lab-117954{{"`Java Stream Filter`"}} java/oop -.-> lab-117954{{"`Java Stream Filter`"}} java/packages_api -.-> lab-117954{{"`Java Stream Filter`"}} java/wrapper_classes -.-> lab-117954{{"`Java Stream Filter`"}} java/identifier -.-> lab-117954{{"`Java Stream Filter`"}} java/arrays -.-> lab-117954{{"`Java Stream Filter`"}} java/comments -.-> lab-117954{{"`Java Stream Filter`"}} java/data_types -.-> lab-117954{{"`Java Stream Filter`"}} java/operators -.-> lab-117954{{"`Java Stream Filter`"}} java/output -.-> lab-117954{{"`Java Stream Filter`"}} java/strings -.-> lab-117954{{"`Java Stream Filter`"}} java/variables -.-> lab-117954{{"`Java Stream Filter`"}} java/object_methods -.-> lab-117954{{"`Java Stream Filter`"}} java/system_methods -.-> lab-117954{{"`Java Stream Filter`"}} end

Create a Stream of Integers

Let's create a Stream of Integers and filter out the even numbers from it. We will declare a list of integers, convert it into a Stream, and then use the filter() method to filter out the even numbers.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamFilter {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Stream<Integer> stream = numbers.stream();

        Stream<Integer> evenNumbers = stream.filter(i -> i % 2 == 0);

        List<Integer> result = evenNumbers.collect(Collectors.toList());

        System.out.println(result); // Output: [2, 4, 6, 8, 10]
    }
}

In the above code, we declare a list of integers, convert it into a Stream using the stream() method, and then filter out the even numbers using the filter() method.

Create a Stream of Strings

Let's create a Stream of Strings and filter out the strings containing a specific letter from it. We will declare a list of strings, convert it into a Stream, and then use the filter() method to filter out the strings containing a specific letter.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamFilter {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("hello", "world", "java", "stream", "filter");
        Stream<String> stream = words.stream();

        char letter = 'l';

        Stream<String> filteredWords = stream.filter(s -> s.indexOf(letter) != -1);

        List<String> result = filteredWords.collect(Collectors.toList());

        System.out.println(result); // Output: [hello, world, filter]
    }
}

In the above code, we declare a list of strings, convert it into a Stream using the stream() method, and then filter out the strings containing the letter 'l' using the filter() method.

Create a Stream of Custom Objects

Let's create a Stream of custom objects and filter out the objects based on a condition. We will declare a list of custom objects, convert it into a Stream, and then use the filter() method to filter out the objects based on a condition.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamFilter {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person("John", 25),
                new Person("Sarah", 30),
                new Person("Mike", 35),
                new Person("Emma", 40)
        );

        Stream<Person> stream = people.stream();

        Stream<Person> filteredPeople = stream.filter(p -> p.getAge() > 30);

        List<Person> result = filteredPeople.collect(Collectors.toList());

        System.out.println(result); // Output: [Mike{name='Mike', age=35}, Emma{name='Emma', age=40}]
    }
}

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 + "{name='" + name + '\'' + ", age=" + age + '}';
    }
}

In the above code, we declare a list of custom objects of type Person, convert it into a Stream using the stream() method, and then filter out the objects whose age is greater than 30 using the filter() method.

Summary

In this lab, we learned how to use the filter() method of Java Streams to filter out elements based on a condition or a predicate. We worked on filtering streams of integers, strings, and custom objects using the filter() method.

Other Java Tutorials you may like