private FieldValue evaluate(FieldValue value, List<FieldValue> values){ Boolean result; if(Objects.equals(FieldValues.MISSING_VALUE, value)){ result = evaluate(values.contains(FieldValues.MISSING_VALUE)); } else { result = evaluate(value.isIn(values)); } return FieldValueUtil.create(TypeInfos.CATEGORICAL_BOOLEAN, result); } }
/** * <p> * Checks if this value is contained in the set of reference values. * </p> */ public boolean isIn(HasValueSet<?> hasValueSet){ if(hasValueSet instanceof HasParsedValueSet){ HasParsedValueSet<?> hasParsedValueSet = (HasParsedValueSet<?>)hasValueSet; return isIn(hasParsedValueSet); } Array array = hasValueSet.getArray(); if(array == null){ throw new MissingElementException(MissingElementException.formatMessage(XPathUtil.formatElement((Class)hasValueSet.getClass()) + "/" + XPathUtil.formatElement(Array.class)), (PMMLObject)hasValueSet); } List<?> values = ArrayUtil.getContent(array); return values.stream() .anyMatch(value -> equalsValue(value)); }
static public Boolean evaluateSimpleSetPredicate(SimpleSetPredicate simpleSetPredicate, EvaluationContext context){ FieldName name = simpleSetPredicate.getField(); if(name == null){ throw new MissingAttributeException(simpleSetPredicate, PMMLAttributes.SIMPLESETPREDICATE_FIELD); } SimpleSetPredicate.BooleanOperator booleanOperator = simpleSetPredicate.getBooleanOperator(); if(booleanOperator == null){ throw new MissingAttributeException(simpleSetPredicate, PMMLAttributes.SIMPLESETPREDICATE_BOOLEANOPERATOR); } FieldValue value = context.evaluate(name); if(Objects.equals(FieldValues.MISSING_VALUE, value)){ return null; } Array array = simpleSetPredicate.getArray(); if(array == null){ throw new MissingElementException(simpleSetPredicate, PMMLElements.SIMPLESETPREDICATE_ARRAY); } switch(booleanOperator){ case IS_IN: return value.isIn(simpleSetPredicate); case IS_NOT_IN: return !value.isIn(simpleSetPredicate); default: throw new UnsupportedAttributeException(simpleSetPredicate, booleanOperator); } }