Простой способ фильтровать элементы из коллекции в Java?

Я хочу написать метод, который удаляет все элементы из коллекции, которые следуют определенному шаблону. В функциональных языках я бы использовал filter () с лямбда-выражением. Однако в Java, похоже, я застрял в этом:

public void removeAllBlueCars() {
    LinkedList<Car> carsToRemove = new LinkedList<Car>();
    for (Car c : cars) {
        if (c.getCarColor() == Color.BLUE) {
            carsToRemove.add(c);
        }
    }
    cars.removeAll(carsToRemove );
}

Удаление элементов напрямую вызывает ConcurrentModificationException. {// 13 protected: typedef void (safe_bool_base :: * bool_type) () const; void this_type_does_not_support_comparisons () ...

Может кто-нибудь объяснить мне, почему этот код:

class safe_bool_base
{ //13
    protected:

        typedef void (safe_bool_base::*bool_type)() const;

        void this_type_does_not_support_comparisons() const {} //18

        safe_bool_base() {}
        safe_bool_base(const safe_bool_base&) {}
        safe_bool_base& operator=(const safe_bool_base&) { return *this; }
        ~safe_bool_base() {}
};

template <typename T=void> class safe_bool : public safe_bool_base
{
    public:

        operator bool_type() const
        {
            return (static_cast<const T*>(this))->boolean_test() ? &safe_bool_base::this_type_does_not_support_comparisons : 0;
        }

    protected:

        ~safe_bool() {}
};

template <> class safe_bool<void> : public safe_bool_base
{
    public:

        operator bool_type() const
        {
            return (boolean_test() == true) ? &safe_bool_base::this_type_does_not_support_comparisons : 0; //46
        }

    protected:

        virtual bool boolean_test() const = 0;
        virtual ~safe_bool() {}
};

вызывает следующую ошибку компилятора?

c:\project\include\safe_bool.hpp(46) : error C2248: 'safe_bool_base::this_type_does_not_support_comparisons' : cannot access protected member declared in class 'safe_bool_base'
c:\project\include\safe_bool.hpp(18) : see declaration of 'safe_bool_base::this_type_does_not_support_comparisons'
c:\project\include\safe_bool.hpp(13) : see declaration of 'safe_bool_base'

Поскольку оба шаблона safe_bool являются производными от safe_bool_base , Я не понимаю, почему нельзя получить доступ к защищенному члену базового класса.

Я что-то упускаю?

5
задан ereOn 7 September 2010 в 11:36
поделиться