Что вы подразумеваете под «фильтрацией»? Удаление определенных элементов из списка? Если это так, вы можете использовать итератор :
for(Iterator<MyElement> it = list.iterator(); it.hasNext(); ) {
MyElement element = it.next();
if (some condition) {
it.remove();
}
}
Обновление (на основе комментариев):
Рассмотрим следующий пример, чтобы проиллюстрировать, как работает итератор. Допустим, у нас есть список, содержащий «А» и «В»:
A A B B A
Мы хотим удалить все эти надоедливые B
s. Итак, используя вышеуказанный цикл, код будет работать следующим образом:
- hasNext ()? Да. следующий().
element
указывает на 1-й А.
- hasNext ()? Да. следующий().
element
указывает на 2-й А.
- hasNext ()? Да. следующий().
element
указывает на 1-й Б. удалить (). Счетчик итератора НЕ изменяется, он по-прежнему указывает на то место, где был B (технически это не совсем правильно, но логически так оно и работает). Если бы вы теперь вызывали метод remove () снова, вы получите исключение (потому что элемента списка больше нет).
- hasNext ()? Да. следующий().
element
указывает на 2-й B. Остальное такое же, как # 3
- hasNext ()? Да. следующий().
element
указывает на 3-й А.
- hasNext ()? Нет, мы закончили. Список теперь имеет 3 элемента.
Update # 2 : remove()
Операция действительно необязательна на итераторе - но только потому, что она необязательна для базовой коллекции. Нижняя строка здесь - если ваша коллекция поддерживает это (и все коллекции в Java Collection Framework), то и итератор тоже. Если ваша коллекция не поддерживает ее, вам все равно не повезло.