Filter a List with Stream in Java

To filter a List in java before Java 8 requires iterating through a complete list and needs us to write many lines of code. After Java 8 filtering a List became so easy. Today I will show how to filter a List before Java 8 and how to filter a list with a stream in Java 8.

1. List Filter before Java 8


package com.kodehelp.java8;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListFilterBeforeJava8 {

    public static void main(final String[] args) {

        final List languages = Arrays.asList("Java", "Kotlin", "Python", "Scala", "Swift");
        final List filteredLanguages = new ArrayList<>();

        // filter out the languages starting with S letter
        for (final String language : languages) {
            if (language != null && !language.startsWith("S")) {
                filteredLanguages.add(language);
            }
        }

        for (final String lang : filteredLanguages) {
            System.out.println(lang);    //output: Java, Kotlin, Python
        }
    }
    
}

2. List Filter with Stream in Java 8


The equivalent example in Java 8, stream.filter() to filter a List, and collect() to convert a stream into a List.

package com.kodehelp.java8;

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

public class ListFilterInJava {
    public static void main(String[] args) {
        
        final List languages = Arrays.asList("Java", "Kotlin", "Python", "Scala", "Swift");

        // filter out the languages starting with S letter
        final List filteredLanguages = languages.stream()                           // convert list to stream
                                     .filter(lang -> lang!=null && !lang.startsWith("S"))   // filter out language starting with S
                                     .collect(Collectors.toList());                         // collect the output and convert streams to a List

        for (final String lang : filteredLanguages) {
            System.out.println(lang);    //output: Java, Kotlin, Python
        }
        
    }
}

References :

1. Java Streams
2. Java Stream Filter