code: public static <T> Predicate<T> and(Iterable<? extends Predicate<? super T>> components) {
      return new AndPredicate<T>(defensiveCopy(components));
    }
docs: 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 iterable 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}.