Remove elements from a List that satisfy given predicate in Java

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

 
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 Predicateimport 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);    }}
List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]

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 Predicateimport 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);    }}
Original List: [1, 10, 15, 10, 12, 5, 10, 20]
Collection to be removed: [10, 10, 10]
Updated List: [1, 15, 12, 5, 20]

 
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 8import 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);    }}
List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]

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 8import 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);    }}
List with null values: [Geeks, null, forGeeks, null, A computer portal]
List with null values removed: [Geeks, forGeeks, A computer portal]

amaannassar123
Java - util package
Java-ArrayList
Java-Collections
java-lambda
java-list
Java-List-Programs
Java
Java
Java-Collections
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.