package tc.oc.pgm.filters.operator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import tc.oc.commons.core.util.Streams; import tc.oc.pgm.filters.Filter; import tc.oc.pgm.filters.matcher.StaticFilter; /** * A filter that derives its response from the responses of multiple * child filters to the same query. * * @see AggregateFilter which has stronger requirements * @see SingleFilterFunction which operates on a single child filter */ public abstract class MultiFilterFunction extends Filter.Impl { @Inspect protected final List<Filter> filters; public MultiFilterFunction(Iterable<? extends Filter> filters) { this.filters = Streams.of(filters) .filter(f -> !f.equals(StaticFilter.ABSTAIN)) .collect(Collectors.toList()); } @Override public Stream<? extends Filter> dependencies() { return filters.stream(); } @Override public String toString() { return inspect(); } }