Remove elements from a List that satisfy given predicate in Java

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
  1. Using iterator

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

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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);
        }
    }

    chevron_right

    
    

    Output:



    List with null values: [Geeks, null, forGeeks, null, A computer portal]
    List with null values removed: [Geeks, forGeeks, A computer portal]
    
  2. 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 Predicate condition. After doing this, the original l is searched for this collection and all instances of it is removed.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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);
        }
    }

    chevron_right

    
    

    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]
    
  3. 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.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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);
        }
    }

    chevron_right

    
    

    Output:

    List with null values: [Geeks, null, forGeeks, null, A computer portal]
    List with null values removed: [Geeks, forGeeks, A computer portal]
    
  4. Using removeIf()

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

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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);
        }
    }

    chevron_right

    
    

    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

Technical Content Engineer at GeeksForGeeks

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.