private static void validateOperands(List<Predicate> operands) {
        if (operands.size() <= 1) {
            throw new IllegalArgumentException("Number of operands must 2 or more, was: " + operands.size());
        }
        if (!operands.stream()
                .allMatch(FeatureConjunction::isValidFeatureConjunctionOperand)) {
            throw new IllegalArgumentException(
                    "A FeatureConjunction may only contain instances of Negation and FeatureSet, " +
                            "and a FeatureSet may only have one value.");
        }

        long uniqueKeys = operands.stream().map(FeatureConjunction::getFeatureSetKey).distinct().count();
        if (operands.size() > uniqueKeys) {
            throw new IllegalArgumentException("Each FeatureSet key must have a unique key.");
        }
    }
A FeatureConjunction is a special type of Conjunction where
all children are either a FeatureSet or a Negation (with an underlying FeatureSet).
The underlying FeatureSets may only have one value.

@author bjorncs
predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureConjunction.java