Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Remove elements from a List that satisfy given predicate in Java

  • Last Updated : 01 Nov, 2020

Below are the methods to efficiently remove elements from a List satisfying a Predicate condition:
 

p  ==> Predicate, specifying the condition
l  ==> List, from which element to be removed

 

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Using iterator

Below program demonstrates the removal of null elements from the list, using the Predicate 
 

Java




// Java Program to remove nulls
// from a List using iterator and Predicate
import java.util.function.Predicate;
import java.util.*;
 
class GFG {
 
    // Generic function to remove Null Using Iterator
    public static <T> List<T>
    removeNullUsingIterator(List<T> l, Predicate<T> p)
    {
 
        // Create an iterator from the l
        Iterator<T> itr = l.iterator();
 
        // Find and remove all null
        while (itr.hasNext()) {
 
            // Fetching the next element
            T t = itr.next();
 
            // Checking for Predicate condition
            if (!p.test(t)) {
 
                // If the condition matches,
                // remove that element
                itr.remove();
            }
        }
 
        // Return the null
        return l;
    }
 
    public static void main(String[] args)
    {
 
        // Create the l with null values
        List<String> l = new ArrayList<>(
               Arrays.asList("Geeks",
                             null,
                             "forGeeks",
                             null,
                             "A computer portal"));
 
        // Print the list
        System.out.println("List with null values: " + l);
 
        // Creating a Predicate condition checking for null
        Predicate<String> isNull = item -> Objects.nonNull(item);
 
        // Removing nulls using iterator and Predicate
        l = removeNullUsingIterator(l, isNull);
 
        // Print the list
        System.out.println("List with null values removed: " + l);
    }
}
Output



List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]

Using List.removeAll()

In this method, a collection containing elements to be removed is used to remove those elements from the original l. It requires creating a collection with the required elements using a Predicate condition. After doing this, the original l is searched for this collection and all instances of it are removed.
 

Java




// Java Program to remove 10
// from a List using List.removeAll() and Predicate
import java.util.function.Predicate;
import java.util.*;
 
class GFG {
 
    // Generic function to remove elements using Predicate
    public static <T> List<T>
    removeElements(List<T> l, Predicate<T> p)
    {
 
        // Create collection using Predicate
        Collection<T> collection = new ArrayList<>();
 
        for (T t : l) {
            if (p.test(t)) {
                collection.add(t);
            }
        }
 
        // Print the list
        System.out.println("Collection to be removed: " + collection);
 
        // Removing 10 using List.removeAll()
        // passing a collection
        l.removeAll(collection);
 
        // Return the list
        return l;
    }
 
    public static void main(String[] args)
    {
 
        // Create a list with null values
        List<String> l = new ArrayList<>(
            Arrays.asList("1", "10", "15", "10", "12", "5", "10", "20"));
 
        // Print the list
        System.out.println("Original List: " + l);
 
        // Creating a Predicate condition checking for 10
        Predicate<String> is10 = i -> (i == "10");
 
        // Removing using Predicate
        l = removeElements(l, is10);
 
        // Print the list
        System.out.println("Updated List: " + l);
    }
}
Output
Original List: [1, 10, 15, 10, 12, 5, 10, 20]
Collection to be removed: [10, 10, 10]
Updated List: [1, 15, 12, 5, 20]

 

Using Lambdas (Java 8)

Stream.filter() method can be used in Java 8 that returns a stream consisting of the elements 
that match the given predicate condition.
 

Java




// Java Program to remove nulls
// from a List using Java 8
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.*;
 
class GFG {
 
    // Generic function to remove elements using Predicate
    public static <T> List<T>
    removeElements(List<T> l, Predicate<T> p)
    {
 
        // Removing nulls using Java Stream
        // using Predicate condition in lambda expression
        l = l.stream()
                   .filter(p)
                   .collect(Collectors.toList());
 
        // Return the list
        return l;
    }
 
    public static void main(String[] args)
    {
 
        // Create a list with null values
        List<String> l = new ArrayList<>(
            Arrays.asList("Geeks",
                          null,
                          "forGeeks",
                          null,
                          "A computer portal"));
 
        // Print the list
        System.out.println("List with null values: " + l);
 
        // Creating a Predicate condition checking for null
        Predicate<String> isNull = i -> (i != null);
 
        // Removing using Predicate
        l = removeElements(l, isNull);
 
        // Print the list
        System.out.println("List with null values removed: " + l);
    }
}
Output
List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]

Using removeIf()

As the name suggests, it is a direct method to remove all elements that satisfy the given predicate.
 

Java




// Java Program to remove nulls
// from a List using Java 8
import java.util.function.Predicate;
import java.util.*;
 
class GFG {
 
    // Generic function to remove elements using Predicate
    public static <T> List<T>
    removeElements(List<T> l, Predicate<T> p)
    {
 
        // Removing nulls using Java Stream
        // using Predicate condition in removeIf()
        l.removeIf(x -> p.test(x));
 
        // Return the list
        return l;
    }
 
    public static void main(String[] args)
    {
 
        // Create a list with null values
        List<String> l = new ArrayList<>(
            Arrays.asList("Geeks",
                          null,
                          "forGeeks",
                          null,
                          "A computer portal"));
 
        // Print the list
        System.out.println("List with null values: " + l);
 
        // Creating a Predicate condition checking for null
        Predicate<String> isNull = i -> (i == null);
 
        // Removing using Predicate
        l = removeElements(l, isNull);
 
        // Print the list
        System.out.println("List with null values removed: " + l);
    }
}
Output
List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]



My Personal Notes arrow_drop_up
Recommended Articles
Page :