Метод Java ArrayList.removeIf() удаляет все элементы, удовлетворяющие условию, путем перебора элементов текущего arraylist и сопоставления их с условием, указанным аргументом Predicate.
ArrayList arraylist = new ArrayList(Arrays.asList("A", "B", "C", "C", "D"));arraylist.removeIf(e -> e.equals("C")); //[A, B, D]
Обратите внимание, что класс ArrayList также предоставляет другие методы для удаления элементов, такие как:
- remove() : удаляет один элемент по значению или положению индекса.
- removeAll() : удаляет все вхождения указанных элементов по их значению.
1. Синтаксис
removeIf() принимает один аргумент типа Predicate. Интерфейс Predicate — это функциональный интерфейс, представляющий условие(функцию с логическим значением) одного аргумента. Он проверяет, соответствует ли данный аргумент условию или нет.
public boolean removeIf(Predicate<? super E> filter);
- Параметр метода – предикат фильтра, который возвращает значение true для элементов, подлежащих удалению.
- Метод возвращает – true, если какие-либо элементы были удалены из этого списка.
- Метод выдает исключение NullPointerException, если предикат равен null.
2. Примеры удаления элементов, соответствующих условию
Для удаления элементов из arraylist мы можем создать условия несколькими способами, используя экземпляры Predicate. Давайте рассмотрим несколько вариантов использования.
2.1. Удалить все четные числа из списка чисел
В этом простом примере у нас есть список нечетных и четных чисел. Затем мы используем метод removeIf(), чтобы удалить все четные числа из списка.
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));numbers.removeIf(number -> number % 2 == 0);System.out.println(numbers);
Вывод программы.
[1, 3, 5, 7, 9]
2.2 Удалить все объекты для сопоставления значения поля
В другом примере у нас есть список сотрудников. Мы удаляем всех сотрудников, чьи имена начинаются с символа «P».
Предикат employee.getName().startsWith(“P”) сопоставляет имя каждого сотрудника и возвращает значение true, если имя начинается с буквы P.
ArrayList<Employee> employees = new ArrayList<>();employees.add(new Employee(1l, "Alex", LocalDate.of(2018, Month.APRIL, 21)));employees.add(new Employee(4l, "Brian", LocalDate.of(2018, Month.APRIL, 22)));employees.add(new Employee(3l, "Piyush", LocalDate.of(2018, Month.APRIL, 25)));employees.add(new Employee(5l, "Charles", LocalDate.of(2018, Month.APRIL, 23)));employees.add(new Employee(2l, "Pawan", LocalDate.of(2018, Month.APRIL, 24)));Predicate<Employee> condition = employee -> employee.getName().startsWith("P");employees.removeIf(condition);System.out.println(employees);
Вывод программы.
[Employee [id=1, name=Alex, dob=2018-04-21],Employee [id=4, name=Brian, dob=2018-04-22],Employee [id=5, name=Charles, dob=2018-04-23]]
3. Заключение
Метод removeIf() — очень удобный способ удалить несколько элементов из arraylist, которые соответствуют определенному условию. В сочетании с мощью предикатов и функционального программирования этот метод помогает создавать лаконичный и читаемый код для таких случаев использования.
Вот и все, что касается ArrayList removeIf() в Java.