code: public void setResultAttributeMapping(final Map<String, ?> resultAttributeMapping) {
          final Map<String, Set<String>> parsedResultAttributeMapping = MultivaluedPersonAttributeUtils.parseAttributeToAttributeMapping(resultAttributeMapping);
  
          if (parsedResultAttributeMapping.containsKey("")) {
              throw new IllegalArgumentException("The map from attribute names to attributes must not have any empty keys.");
          }
  
          final Collection<String> userAttributes = MultivaluedPersonAttributeUtils.flattenCollection(parsedResultAttributeMapping.values());
  
          this.resultAttributeMapping = parsedResultAttributeMapping;
          this.possibleUserAttributes = new LinkedHashSet<>(userAttributes);
      }
docs: Set the {@link Map} to use for mapping from a data layer name to an attribute name or {@link Set} of attribute
  names. Data layer names that are specified but have null mappings will use the column name for the attribute
  name. Data layer names that are not specified as keys in this {@link Map} will be ignored.
  <br>
  The passed {@link Map} must have keys of type {@link String} and values of type {@link String} or a {@link Set}
  of {@link String}.
  
  @param resultAttributeMapping {@link Map} from column names to attribute names, may not be null.
  @throws IllegalArgumentException If the {@link Map} doesn't follow the rules stated above.
  @see MultivaluedPersonAttributeUtils#parseAttributeToAttributeMapping(Map)