public static <T> Predicate<T> and(Predicate<? super T>... components) {
        return new AndPredicate<T>(ImmutableList.of(components));
    }
public static < T > Predicate < T > and ( Predicate < ? super T > ... components ) { return new AndPredicate < T > ( ImmutableList . of ( components ) ) ; }
Returns a predicate that evaluates to {@code true} if each of its
components evaluates to {@code true}. The components are evaluated in
order, and evaluation will be "short-circuited" as soon as a false
predicate is found. It defensively copies the array passed in, so future
changes to it won't alter the behavior of this predicate. If {@code
components} is empty, the returned predicate will always evaluate to {@code
true}.

@param components the components
@return a predicate