Удалить из коллекции строки, начинающиеся на "aaa"

65. Удалить строки, начинающиеся с aaa

Условие задачи:
Необходимо реализовать метод, который принимает коллекцию строк и удаляет из неё все элементы, начинающиеся с "aaa".

Метод должен изменять переданную коллекцию.

Код:

public static void filterTripleA(
        Collection<String> strings
) {
    // код тут
}

Спойлеры к решению

Подсказки
💡 Для удаления элементов по условию можно использовать removeIf().
💡 Перед вызовом startsWith() обработай значение null.
💡 Используй Collection<String> вместо raw-типа Collection.
💡 Переданная коллекция должна поддерживать удаление элементов.

Решение
public static void filterTripleA(
        Collection<String> strings
) {
    if (strings == null) {
        throw new IllegalArgumentException(
                "Collection must not be null"
        );
    }

    strings.removeIf(
            value -> value != null
                    && value.startsWith("aaa")
    );
}

Пример использования:

List<String> strings = new ArrayList<>(
        List.of(
                "aaa123",
                "bbb",
                "aa",
                "aaaa"
        )
);

filterTripleA(strings);

System.out.println(strings);

Результат:

[bbb, aa]

Метод removeIf() безопасно удаляет элементы во время обхода коллекции.

Для неизменяемых коллекций, например созданных через List.of(), удаление приведёт к UnsupportedOperationException.

Временная сложность — O(n × m), где m — длина проверяемого префикса. Для фиксированного префикса "aaa" сложность можно считать O(n).