code: 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);
      }
docs: 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.