package com.github.lwhite1.tablesaw.filtering;
import com.github.lwhite1.tablesaw.api.Table;
import com.github.lwhite1.tablesaw.util.Selection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* A composite filtering that only returns {@code true} if all component filters return true
*/
public class AnyOf extends CompositeFilter {
private List<Filter> filterList = new ArrayList<>();
AnyOf(Collection<Filter> filters) {
this.filterList.addAll(filters);
}
public static AnyOf anyOf(Filter... filters) {
List<Filter> filterList = new ArrayList<>();
Collections.addAll(filterList, filters);
return new AnyOf(filterList);
}
public static AnyOf anyOf(Collection<Filter> filters) {
return new AnyOf(filters);
}
public Selection apply(Table relation) {
Selection selection = null;
for (Filter filter : filterList) {
if (selection == null) {
selection = filter.apply(relation);
} else {
selection.or(filter.apply(relation));
}
}
return selection;
}
}