Course Curriculum

Remove elements from a List that satisfy given predicate in Java

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

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

// Java Program to remove nulls
// from a List using iterator and Predicate
import java.util.function.Predicate;
import java.util.*;

class P_AI {

// 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("Prutor",
null,
"Prutor",
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: [Prutor, null, Prutor, null, A computer portal]
List with null values removed: [Prutor, Prutor, 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 Program to remove 10
// from a List using List.removeAll() and Predicate
import java.util.function.Predicate;
import java.util.*;

class P_AI {

// 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 Program to remove nulls
// from a List using Java 8
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.*;

class P_AI {

// 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("Prutor",
null,
"Prutor",
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: [Prutor, null, Prutor, null, A computer portal]
List with null values removed: [Prutor, Prutor, A computer portal]
Using removeIf()
As the name suggests, it is a direct method to remove all elements that satisfy the given predicate.

// Java Program to remove nulls
// from a List using Java 8
import java.util.function.Predicate;
import java.util.*;

class P_AI {

// 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("Prutor",
null,
"Prutor",
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: [Prutor, null, Prutor, null, A computer portal]
List with null values removed: [Prutor, Prutor, A computer portal]

(Next Lesson) How to start learning Java