/** * Creates a {@code Predicate} from the {@link CONTAINS} and {@link DOES_NOT_CONTAIN} operators in the list of filters. The returned * {@code Predicate} uses the {@link Function}s returned by {@link isContaining} and {@link isNotContaining} to construct the sub * {@code Predicate}s for each {@code Operator}, and then {@link and}s them all together. * * @param filters filters to create a predicate for * @return {@code Predicate} from the {@code CONTAINS} and {@code DOES_NOT_CONTAIN} filters */ public static Predicate<String> containsAndDoesNotContain(Iterable<Pair<Operator, Iterable<String>>> filters) { return containsAndDoesNotContain(filters, isContaining(), isNotContaining()); }