public static Expression combineDisjunctsWithDefault(Collection<Expression> expressions, Expression emptyDefault) { requireNonNull(expressions, "expressions is null"); List<Expression> disjuncts = expressions.stream() .flatMap(e -> ExpressionUtils.extractDisjuncts(e).stream()) .filter(e -> !e.equals(FALSE_LITERAL)) .collect(toList()); disjuncts = removeDuplicates(disjuncts); if (disjuncts.contains(TRUE_LITERAL)) { return TRUE_LITERAL; } return disjuncts.isEmpty() ? emptyDefault : or(disjuncts); }
public static Expression combineConjuncts(Collection<Expression> expressions) { requireNonNull(expressions, "expressions is null"); List<Expression> conjuncts = expressions.stream() .flatMap(e -> ExpressionUtils.extractConjuncts(e).stream()) .filter(e -> !e.equals(TRUE_LITERAL)) .collect(toList()); conjuncts = removeDuplicates(conjuncts); if (conjuncts.contains(FALSE_LITERAL)) { return FALSE_LITERAL; } return and(conjuncts); }
public static Expression combineConjunctsWithDefault(Iterable<Expression> expressions, Expression emptyDefault) { requireNonNull(expressions, "expressions is null"); // Flatten all the expressions into their component conjuncts expressions = Iterables.concat(transform(expressions, ExpressionUtils::extractConjuncts)); // Strip out all true literal conjuncts expressions = filter(expressions, not(Predicates.<Expression>equalTo(TRUE_LITERAL))); expressions = removeDuplicates(expressions); if (contains(expressions, FALSE_LITERAL)) { return FALSE_LITERAL; } return Iterables.isEmpty(expressions) ? emptyDefault : and(expressions); }
public static Expression combineDisjunctsWithDefault(Iterable<Expression> expressions, Expression emptyDefault) { requireNonNull(expressions, "expressions is null"); // Flatten all the expressions into their component disjuncts expressions = Iterables.concat(transform(expressions, ExpressionUtils::extractDisjuncts)); // Strip out all false literal disjuncts expressions = filter(expressions, not(Predicates.<Expression>equalTo(FALSE_LITERAL))); expressions = removeDuplicates(expressions); if (contains(expressions, TRUE_LITERAL)) { return TRUE_LITERAL; } return Iterables.isEmpty(expressions) ? emptyDefault : or(expressions); }