Java - iterate over List and remove indicated items
In this article, we would like to show you how to iterate over List and remove indicated items in Java.
Note:
By iterating and deleting, we change the structure of the list. After deleting an element, loop iterators get lost, that's why the API was issued.
In this example, we use an iterator to remove indicated items from the letters
ArrayList.
xxxxxxxxxx
import java.util.*;
public class Example {
public static void main(String[] args) {
List<String> letters = new ArrayList<>();
letters.add("A");
letters.add("B");
letters.add("A");
letters.add("C");
Iterator<String> iterator = letters.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("A")) {
iterator.remove();
}
}
System.out.println(letters);
}
}
Output:
xxxxxxxxxx
[B, C]
In this example, we use Java 8 removeIf()
method to remove indicated elements from the letters
ArrayList.
xxxxxxxxxx
import java.util.*;
public class Example {
public static void main(String[] args) {
List<String> letters = new ArrayList<>();
letters.add("A");
letters.add("B");
letters.add("A");
letters.add("C");
letters.removeIf(element -> element.equals("A"));
System.out.println(letters);
}
}
Output:
xxxxxxxxxx
[B, C]
In this example, we collect indicated elements in the new ArrayList, then we use removeAll()
method that removes all the collected elements from the original ArrayList.
xxxxxxxxxx
import java.util.*;
public class Example {
public static void main(String[] args) {
List<String> letters = new ArrayList<>();
letters.add("A");
letters.add("B");
letters.add("A");
letters.add("C");
String letterToRemove = "A";
List<String> lettersToRemove = new ArrayList<>();
// find letters to remove
for (String letter : letters) {
if (letter.equals(letterToRemove)) {
lettersToRemove.add(letter);
}
}
// remove letters
letters.removeAll(lettersToRemove);
System.out.println(letters);
}
}
Output:
xxxxxxxxxx
[B, C]
In this example, we create an instance of a stream from the letters
ArrayList, filter each element and collect the result in the new filteredLetters
.
xxxxxxxxxx
import java.util.*;
import java.util.stream.Collectors;
public class Example {
public static void main(String[] args) {
List<String> letters = new ArrayList<>();
letters.add("A");
letters.add("B");
letters.add("A");
letters.add("C");
List<String> filteredLetters = letters
.stream()
.filter(element -> !element.equals("A"))
.collect(Collectors.toList());
System.out.println(filteredLetters);
}
}
Output:
xxxxxxxxxx
[B, C]
In this example, we remove all items from the letters
ArrayList using reversed for loop.
xxxxxxxxxx
import java.util.*;
public class Example {
public static void main(String[] args) {
List<String> letters = new ArrayList<>();
letters.add("A");
letters.add("B");
letters.add("C");
for (int i = letters.size(); i-- > 0; ) {
letters.remove(i);
}
System.out.println(letters);
}
}
Output:
xxxxxxxxxx
[]
Note:
This solution is inefficient and not recommended.