Этот урок Java научит нас, как удалить все вхождения элемента из списка, используя различные методы. Удаление определенного элемента из списка легко выполняется с помощью встроенных методов. Однако удаление всех вхождений элемента — утомительная задача.
1. Использование List.removeAll()
Это один из простых и легких способов удалить вхождения элемента из списка. Метод removeAll() удаляет все элементы в списке, которые содержатся в указанной коллекции. Мы можем передать коллекцию в качестве параметра, содержащего элементы, которые необходимо удалить из этого списка.
List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(2);int itemToRemove = 2;list.removeAll(Collections.singleton(itemToRemove));
2. Использование потоков
API потока предоставляет удобный способ фильтрации всех определенных элементов из потока. Нам нужно перебрать элементы потока и собрать записи в списке после фильтрации элементов, которые необходимо удалить.
System.out.println(list.stream().filter(e -> !Objects.equals(e, item)).collect(Collectors.toList()));
В этом подходе мы будем использовать метод removeIf() для устранения всех вхождений элемента из потока. Он ожидает Predicate, который удаляет элемент, когда он удовлетворяет условию, и возвращает true.
list.stream().removeIf(i -> Objects.equals(i, item));
3. Использование remove() в цикле
Метод remove() удаляет первое вхождение элемента в списке. Мы можем вызывать его повторно, чтобы удалить все вхождения элемента, пока он не вернет false. Обратите внимание, что этот подход неэффективен, когда количество вхождений элемента велико.
for(int i = 0; i < myList.size(); i++) {if(Objects.equals(item, myList.get(i))) {list.remove(i);}}
4. Заключение
В этом уроке по Java мы научились удалять все вхождения элемента из списка, используя различные методы: от циклов до методов Java 8.
Эффективный способ удалить все вхождения элемента из списка — использовать методы removeAll() или Stream API вместо итерации элементов по одному.