code: public static <T> Predicate<T> and(Predicate<? super T> first, Predicate<? super T> second) {
          checkArgNotNull(first, "first");
          checkArgNotNull(second, "second");
          return new AndPredicate<T>(ImmutableList.<Predicate<? super T>>of(first, second));
      }
docs: Returns a predicate that evaluates to {@code true} if both of its
  components evaluate to {@code true}. The components are evaluated in
  order, and evaluation will be "short-circuited" as soon as a false
  predicate is found.
  
  @param first the first
  @param second the second
  @return a predicate