Javatpoint Logo
Javatpoint Logo

Remove elements from a List that satisfy given predicate in Java

In Java, selectively removing elements from a List based on a specified condition, often encapsulated by a predicate, is a common task in programming. The operation is crucial when developers must filter out elements that do not meet specific criteria, enhancing the efficiency and relevance of the data held within the List.

The following methods offer an efficient approach to selectively eliminate elements from a List based on a given Predicate condition:

Using Iterator

In Java, removing elements from a List based on a specified predicate is a common operation, and iterators provide a versatile approach to achieve this task. By using iterators, developers can iterate over a List, inspect elements, and selectively remove those that satisfy a given predicate, offering a flexible and efficient means of data manipulation.

Algorithm:

Step 1: Create a generic method named removeNullsUsingIterator that takes a list of items (itemList) and a predicate condition (Predicate<T> condition) as parameters.

Step 2: Inside the removeNullsUsingIterator method, create an iterator (Iterator<T> iterator) from the input list (itemList).

Step 3: Employ a while loop (while (iterator.hasNext())) to iterate through the elements of the list using the iterator.

Step 4: Within the loop, obtain the next element from the iterator (T fruit = iterator.next();).

Step 5: Check the fetched element against the provided predicate condition using condition.test(fruit).

Step 6: If the condition is not satisfied (!condition.test(fruit)), remove the current element from the list using the iterator (iterator.remove()).

Step 7: Return the modified list (return itemList) after completing the iteration.

Implementation:

Filename: IteratorExample.java

Output:

Original Fruit List: [Apple, null, Banana, null, Orange]
List after removing null values: [Apple, Banana, Orange]

Time Complexity: O(n) (linear), where n is the number of elements in the list.

Space Complexity: O(1) (constant), as the additional space required is not dependent on the size of the input list.

Using List.removeAll()

In Java, `List.removeAll()` is a method provided by the `List` interface to efficiently remove all occurrences of elements from a list that are present in another collection. It streamlines the process of eliminating specific elements based on equality, enhancing code readability and simplifying the removal operation.

Implementation:

Filename: RemoveElementsExample.java

Output:

Original List before removal: [Apple, Banana, Orange, Banana, Grapes, Kiwi, Banana, Mango]
Elements to be removed: [Banana, Banana, Banana]
List after removing elements matching the condition: [Apple, Orange, Grapes, Kiwi, Mango]

Time Complexity: The time complexity of this code is O(n), which means it is linear. Here, 'n' represents the number of elements in the original list. The code iterates through each element in the list once, applying the predicate condition and removing elements as needed.

Space Complexity: The space complexity of the above code is O(m). The space complexity depends on the number of elements that satisfy the removal condition, denoted as m. The elementsToRemove collection stores these elements. In the worst case, when all elements meet the condition, the space complexity is O(n), but in typical cases, it would be O(m). The rest of the space complexity is constant, as it does not depend on the size of the input list.

Using Lambdas (Java 8)

In Java 8, Lambdas introduce a concise and expressive way to represent anonymous functions, enabling functional programming paradigms. Lambdas are particularly useful when working with functional interfaces, allowing developers to write more readable and concise code for tasks like event handling, threading, and functional transformations.

Implementation:

Filename: RemoveNullsExample.java

Output:

Original list: [Apple, null, Banana, null, Orange]
List after removing null values: [Apple, Banana, Orange]

Time Complexity: The time complexity of the above code is O(n). The time complexity is linear, where n is the number of elements in the input list. The stream operations (filter and collect) iterate through each element once.

Space Complexity: The space complexity of the above code is O(n). The space complexity is linear. Intermediate and final data structures created during stream operations contribute to space usage proportional to the number of elements in the input list. The size of the input list and the resulting filtered list both impact space complexity.

Using removeIf()

In Java, the removeIf() method is part of the Collection interface and is used to remove elements from a collection based on a specified condition. It takes a Predicate as an argument, defining the removal condition.

Implementation:

Filename: RemoveUsingIf.java

Output:

Original list: [Apple, null, Banana, null, Orange]
List after removing null values: [null, null]

Time Complexity: The time complexity of the provided code is O(n). It is because the removeIf() method iterates through the list once, resulting in a linear operation with respect to the number of elements (n) in the list.

Space Complexity: The space complexity is O(1). The code uses only constant additional space for temporary variables and the predicate object, regardless of the list size.







Youtube For Videos Join Our Youtube Channel: Join Now

Feedback


Help Others, Please Share

facebook twitter pinterest

Learn Latest Tutorials


Preparation


Trending Technologies


B.Tech / MCA