package com.indyforge.twod.engine.util.iteration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * A composite filter combines multiple filters to accept elements. * * @author Christopher Probst * * @param <E> * The element type. */ public final class CompositeFilter<E> implements Filter<E> { // The filters private final List<Filter<? super E>> filters = new LinkedList<Filter<? super E>>(); /** * Creates a new composite filter using the given filter array. * * @param filters * The filters. */ public CompositeFilter(Filter<? super E>... filters) { this(new ArrayIterator<Filter<? super E>>(filters)); } /** * Creates a new composite filter using the given filter iterator. * * @param filters * The filters. */ public CompositeFilter(Iterator<? extends Filter<? super E>> filters) { if (filters == null) { throw new NullPointerException("filters"); } // Save the filters while (filters.hasNext()) { this.filters.add(filters.next()); } } /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.util.iteration.Filter#accept(java.lang.Object) */ @Override public boolean accept(E element) { // For all filters for (Filter<? super E> filter : filters) { // Check the filter if (filter != null && !filter.accept(element)) { return false; } } return true; } }