public FilterPredicate buildPredicate(PredicateLeaf.Operator op, List<Object> literals,
                                        String columnName, TypeInfo columnType) throws Exception {
    FilterPredicate result = null;
    switch (op) {
      case IN:
        for (Object literal : literals) {
          if (result == null) {
            result = buildPredict(PredicateLeaf.Operator.EQUALS, literal, columnName, columnType);
          } else {
            result = or(result, buildPredict(PredicateLeaf.Operator.EQUALS, literal,
                columnName, columnType));
          }
        }
        return result;
      case BETWEEN:
        if (literals.size() != 2) {
          throw new RuntimeException(
            "Not able to build 'between' operation filter with " + literals +
              " which needs two literals");
        }
        Object min = literals.get(0);
        Object max = literals.get(1);
        FilterPredicate lt = not(buildPredict(PredicateLeaf.Operator.LESS_THAN,
            min, columnName, columnType));
        FilterPredicate gt = buildPredict(PredicateLeaf.Operator.LESS_THAN_EQUALS, max, columnName, columnType);
        result = FilterApi.and(gt, lt);
        return result;
      default:
        throw new RuntimeException("Unknown PredicateLeaf Operator type: " + op);
    }
  }
Build filter predicate with multiple constants

@param op         IN or BETWEEN
@param literals
@param columnName
@param columnType
@return
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/FilterPredicateLeafBuilder.java