public static <T> Predicate<T> and(
            Collection<Predicate<? super T>> components) {
        int n = components.size();
        @SuppressWarnings("unchecked")
        Predicate<? super T>[] arr = new Predicate[n];
        components.toArray(arr);
        return and(arr);
    }
public static < T > Predicate < T > and ( Collection < Predicate < ? super T > > components ) { int n = components . size ( ) ; @ SuppressWarnings ( "unchecked" ) Predicate < ? super T > [ ] arr = new Predicate [ n ] ; components . toArray ( arr ) ; return and ( arr ) ; }
Returns a Predicate that evaluates to true iff each of its components
evaluates to true.  The components are evaluated in order, and evaluation
will be "short-circuited" as soon as the answer is determined.  Does not
defensively copy the array passed in, so future changes to it will alter
the behavior of this Predicate.