import java.util.HashMap;
import java.util.Map;
class URLParameterNester {
/**
* Nests URL parameters based on a hierarchy.
* @param params A map of URL parameters.
* @param nestingRules A map defining how to nest parameters. Key is the parameter name, value is the nesting level.
* @return A nested map representing the structured parameters.
*/
public static Map<String, Object> nestParameters(Map<String, String> params, Map<String, Integer> nestingRules) {
Map<String, Object> nestedParams = new HashMap<>();
if (params == null || params.isEmpty()) {
return nestedParams;
}
for (Map.Entry<String, String> entry : params.entrySet()) {
String paramName = entry.getKey();
String paramValue = entry.getValue();
int nestingLevel = nestingRules.getOrDefault(paramName, 0); // Default nesting level is 0
if (nestingLevel > 0) {
// Create nested structure if nesting level is greater than 0
String parentKey = getParentKey(paramName, nestingLevel);
if (!nestedParams.containsKey(parentKey)) {
nestedParams.put(parentKey, new HashMap<>());
}
nestedParams.get(parentKey).put(paramName, paramValue);
} else {
// Direct parameters
nestedParams.put(paramName, paramValue);
}
}
return nestedParams;
}
private static String getParentKey(String paramName, int nestingLevel) {
StringBuilder parentKey = new StringBuilder();
for (int i = 0; i < nestingLevel; i++) {
parentKey.append(paramName);
if (i < nestingLevel - 1) {
parentKey.append("_");
}
}
return parentKey.toString();
}
public static void main(String[] args) {
// Example Usage
Map<String, String> urlParams = new HashMap<>();
urlParams.put("user", "john.doe");
urlParams.put("user_id", "123");
urlParams.put("user_profile", "active");
urlParams.put("user_profile_settings", "theme=dark");
urlParams.put("order", "12345");
urlParams.put("order_details", "items=[item1, item2]");
urlParams.put("order_details_items", "item1=10, item2=20");
Map<String, Integer> nestingRules = new HashMap<>();
nestingRules.put("user", 1);
nestingRules.put("order", 1);
nestingRules.put("user_profile", 2);
nestingRules.put("order_details", 2);
nestingRules.put("user_profile_settings", 3);
Map<String, Object> nestedParams = nestParameters(urlParams, nestingRules);
System.out.println(nestedParams);
}
}
Add your comment