public static <T> Predicate<T> and(Predicate<T> left, Predicate<T> right) { if (left == TRUE) { return right; } if (right == TRUE) { return left; } return (left == FALSE || right == FALSE) ? Is.<T>false_() : new AndPredicate<T>(left, right); }