package com.revolsys.predicate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import com.revolsys.collection.list.Lists;
public class AndPredicate<T> implements Predicate<T> {
private final List<Predicate<T>> predicates = new ArrayList<>();
public AndPredicate() {
}
public AndPredicate(final Iterable<Predicate<T>> predicates) {
Lists.addAll(this.predicates, predicates);
}
@SuppressWarnings("unchecked")
public AndPredicate(final Predicate<T>... predicates) {
this(Arrays.asList(predicates));
}
public void addFilter(final Predicate<T> predicate) {
this.predicates.add(predicate);
}
@Override
public boolean test(final T object) {
for (final Predicate<T> predicate : this.predicates) {
final boolean test = predicate.test(object);
if (!test) {
return false;
}
}
return true;
}
@Override
public String toString() {
return "AND" + this.predicates;
}
}