I would like to remove an element from an ArrayList
in Java if it meets a certain criteria.
ie:
for (Pulse p : pulseArray) {
if (p.getCurrent() == null) {
pulseArray.remove(p);
}
}
I can understand why this does not work, but what is a good way to do this?
Using an Iterator would give you the power of modifying the list while iterating through the arraylist
As an alterative to using an iterator, you can use the Guava collections library. This has the advantage of being more functional (if you are into that sort of thing):
No need to use iterator. With Java 8 (streaming and filtering capability and lambdas) you can accomplish it using one line. For eg. the required code that does the operation you specified will be :
You can use Collection::removeIf(Predicate filter) (available from Java8 onwards), here is a simple example:
You can't alter a collection that you're iterating through using methods on the collection. However, some iterators (including iterators on
ArrayList
s) support aremove()
method that allows you to remove methods in the order that you're iterating.You must use an
Iterator
to iterate and theremove
function of the iterator (not of the list) :Note that the Iterator#remove function is said to be optionnal but it is implemented by the ArrayList's iterator.
Here's the code of this concrete function from ArrayList.java :
The
expectedModCount = modCount;
line is why it won't throw an exception when you use it while iterating.