Удалить все экземпляры элемента из коллекции - PullRequest
0 голосов
/ 20 апреля 2011

Мне нужно удалить все элементы из коллекции c, которые меньше заданного объекта.

Подпись должна быть void removeLess(Collection c, Object o)

Хотелось бы что-нибудь подобное?:

void removeLess(Collection c, Object o) {
    Iterator<Integer> itr = c.iterator();
    while (itr.hasNext()) {
        if (itr.next.compareTo(o) < 0) {
            c.remove(o);
        }
    }
}

Ответы [ 4 ]

3 голосов
/ 20 апреля 2011

Вы не можете использовать c.remove(o) или вы сделали недействительным итератор;но вы можете использовать дополнительный метод Iterator.remove(), как в itr.remove().Удаляет последний объект, возвращенный из «next».

0 голосов
/ 20 апреля 2011

Вместо этого вы должны будете использовать Iterator метод remove, а подпись должна быть:

<E extends Comparable<? super E>> void removeLess(Collection<E> c, E o)

С NavigableSet<E>, например TreeSet, вымог просто сделать:

set.headSet(o).clear();
0 голосов
/ 20 апреля 2011

Нет, это не будет работать, так как вы не можете изменить коллекцию, пока над ней стоит Iterator.Вы должны накапливать элементы, которые вы удалите в другую временную коллекцию, и впоследствии удалить их все.

Лучшим подходом, если вам не нужны индексы, в которых находится элемент, будет использование TreeSet<T> класс, который по структуре предоставляет метод tailSet(T element), который делает именно то, что вам нужно.

0 голосов
/ 20 апреля 2011

Похоже, что при условии, что класс Collection Iterator поддерживает метод remove.

И у вас есть синтаксическая ошибка - должно быть itr.next().

Также попробуйте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...