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 removal of null elements from 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
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 Predicate condition. After doing this, the original l is searched for this collection and all instances of it is removed.
// 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:
br>
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
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 given predicate.
// 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]
leave a comment
0 Comments