вторник, 12 октября 2010 г.

Java хитрости: как удалить все элементы А из коллекции.

Мне всегда казалось, что удалять все элементы А из коллекции с помощью цикла или итератора - это подозрительно некрасиво (ну неужели Collecion Framework
не предусматривает нормального способа это сделать?). Сегодня на меня снизошло откровение:

collection.removeAll(Collections.singleton(A));

Откровение номер два - оказывается метод removeAll совсем не так прост как изначально притворялся. Всегда думала, что он делает что-то вроде

boolean removeAll (Collection collection){
   for(E e: collection){
      this.remove(e);
   }
}

и ведь нифига :

public boolean removeAll(Collection c) {
   boolean modified = false;
   Iterator e = iterator();
   while (e.hasNext()) {
      if (c.contains(e.next())) {
         e.remove();
         modified = true;
      }
   }
   return modified;
}

1 комментарий:

  1. У меня тоже сегодня было замечательное открытие. Точнее закрытие. Дали поревьюить код, во многих местах выставил "NPE is possible here". Разработчик отвечает: это же "внутренняя конфигурация"! Никакой пользователь не будет править её сам!

    Устроили большой консилиум и решили, что никакой "внутренней конфигурации" в природе не существует :) Входные данные нужно проверять всегда. Так вот и не состоялось у меня открытия... Закрыли тему )

    ОтветитьУдалить