code: public static List<String> getAllVariantKeys(Map<String, ? extends Collection<String>> variants) {
  
  		List<String> variantKeys = new ArrayList<>();
  		for (Collection<String> variantList : new TreeMap<>(variants).values()) {
  			if (variantKeys.isEmpty()) {
  				variantKeys = getVariantKeys(null, variantList);
  			} else {
  
  				List<String> tmpResult = new ArrayList<>();
  				for (String curVariantKey : variantKeys) {
  					tmpResult.addAll(getVariantKeys(curVariantKey + JawrConstant.VARIANT_SEPARATOR_CHAR, variantList));
  				}
  				variantKeys = tmpResult;
  			}
  		}
  
  		if (variantKeys.isEmpty()) {
  			variantKeys.add(null);
  		}
  		return variantKeys;
  	}
docs: Returns all variant keys from the map of variant set
  
  @param variants
  the map of variant set
  @return all variant keys