Collection.removeIf()
Удаляет из коллекции все элементы, подходящие под условие.
Доступно с: Java 8
Синтаксис
default boolean removeIf(Predicate<? super E> filter)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| filter | Predicate<? super E> | Условие: элементы, для которых оно истинно, удаляются. |
Возвращаемое значение
boolean`true`, если что-то было удалено.
Примеры
Удаление пустых строк:
void main() {
List<String> lines = new ArrayList<>(List.of("one", "", "two", " ", "three"));
lines.removeIf(String::isBlank);
IO.println(lines);
}Результат:
[one, two, three]Работает и для множеств, и для значений словаря:
void main() {
Set<Integer> nums = new TreeSet<>(List.of(1, 2, 3, 4, 5));
nums.removeIf(n -> n > 3);
IO.println(nums);
Map<String, Integer> stock = new TreeMap<>(Map.of("pen", 0, "cup", 4));
stock.values().removeIf(q -> q == 0);
IO.println(stock);
}Результат:
[1, 2, 3]
{cup=4}Примечания
Меняет саму коллекцию, в отличие от stream().filter(), который создаёт новую. Условие задаёт, что удалить, а у filter() — что оставить; не перепутайте знак.
См. также
- Iterator — Объект, который по одному выдаёт элементы коллекции.
- List.remove() — Удаляет элемент списка по индексу или по значению.
- Stream.filter() — Оставляет в потоке только элементы, подходящие под условие.
- Predicate — Условие: функция, которая принимает значение и возвращает `boolean`.
Вопросы и ответы по теме
В учебнике
- Обход коллекций — Как перебрать коллекцию в Java: цикл for-each, индексы, forEach с лямбдой, обход словаря, Iterator и removeIf.