public static <T> Expression<T> dnf(Operator operator, Expression<T> existing, Expression<T> newExpression) {
    if (!(operator == Operators.AND || operator == Operators.OR)) {
      throw new IllegalArgumentException(String.format("Expected %s for operator but got %s",
              Arrays.asList(Operators.AND, Operators.OR), operator));
    }

    if (isNil(existing)) {
      return DnfExpression.<T>create().and(newExpression);
    }

    if (!(existing instanceof DnfExpression)) {
      throw new IllegalStateException(String.format("Expected existing expression to be %s but was %s",
              DnfExpression.class.getName(), existing.getClass().getName()));
    }

    @SuppressWarnings("unchecked")
    final DnfExpression<T> conjunction = (DnfExpression<T>) existing;
    return operator == Operators.AND ? conjunction.and(newExpression) : conjunction.or(newExpression);
  }
public static <T> Expression<T> dnf(Operator operator, Expression<T> existing, Expression<T> newExpression) {
    if (!(operator == Operators.AND || operator == Operators.OR)) {
      throw new IllegalArgumentException(String.format("Expected %s for operator but got %s",
              Arrays.asList(Operators.AND, Operators.OR), operator));
    }

    if (isNil(existing)) {
      return DnfExpression.<T>create().and(newExpression);
    }

    if (!(existing instanceof DnfExpression)) {
      throw new IllegalStateException(String.format("Expected existing expression to be %s but was %s",
              DnfExpression.class.getName(), existing.getClass().getName()));
    }

    @SuppressWarnings("unchecked")
    final DnfExpression<T> conjunction = (DnfExpression<T>) existing;
    return operator == Operators.AND ? conjunction.and(newExpression) : conjunction.or(newExpression);
  }
public static < T > Expression < T > dnf ( Operator operator , Expression < T > existing , Expression < T > newExpression ) { if ( ! ( operator == Operators . AND || operator == Operators . OR ) ) { throw new IllegalArgumentException ( String . format ( "Expected %s for operator but got %s" , Arrays . asList ( Operators . AND , Operators . OR ) , operator ) ) ; } if ( isNil ( existing ) ) { return DnfExpression . < T > create ( ) . and ( newExpression ) ; } if ( ! ( existing instanceof DnfExpression ) ) { throw new IllegalStateException ( String . format ( "Expected existing expression to be %s but was %s" , DnfExpression . class . getName ( ) , existing . getClass ( ) . getName ( ) ) ) ; } @ SuppressWarnings ( "unchecked" ) final DnfExpression < T > conjunction = ( DnfExpression < T > ) existing ; return operator == Operators . AND ? conjunction . and ( newExpression ) : conjunction . or ( newExpression ) ; }
Combines expressions <a href="https://en.wikipedia.org/wiki/Disjunctive_normal_form">Disjunctive normal form</a>
Combines expressions <a href = https : // en . wikipedia . org / wiki / Disjunctive_normal_form > Disjunctive normal form< / a >