1. import java.util.HashMap;
  2. import java.util.Map;
  3. class URLParameterNester {
  4. /**
  5. * Nests URL parameters based on a hierarchy.
  6. * @param params A map of URL parameters.
  7. * @param nestingRules A map defining how to nest parameters. Key is the parameter name, value is the nesting level.
  8. * @return A nested map representing the structured parameters.
  9. */
  10. public static Map<String, Object> nestParameters(Map<String, String> params, Map<String, Integer> nestingRules) {
  11. Map<String, Object> nestedParams = new HashMap<>();
  12. if (params == null || params.isEmpty()) {
  13. return nestedParams;
  14. }
  15. for (Map.Entry<String, String> entry : params.entrySet()) {
  16. String paramName = entry.getKey();
  17. String paramValue = entry.getValue();
  18. int nestingLevel = nestingRules.getOrDefault(paramName, 0); // Default nesting level is 0
  19. if (nestingLevel > 0) {
  20. // Create nested structure if nesting level is greater than 0
  21. String parentKey = getParentKey(paramName, nestingLevel);
  22. if (!nestedParams.containsKey(parentKey)) {
  23. nestedParams.put(parentKey, new HashMap<>());
  24. }
  25. nestedParams.get(parentKey).put(paramName, paramValue);
  26. } else {
  27. // Direct parameters
  28. nestedParams.put(paramName, paramValue);
  29. }
  30. }
  31. return nestedParams;
  32. }
  33. private static String getParentKey(String paramName, int nestingLevel) {
  34. StringBuilder parentKey = new StringBuilder();
  35. for (int i = 0; i < nestingLevel; i++) {
  36. parentKey.append(paramName);
  37. if (i < nestingLevel - 1) {
  38. parentKey.append("_");
  39. }
  40. }
  41. return parentKey.toString();
  42. }
  43. public static void main(String[] args) {
  44. // Example Usage
  45. Map<String, String> urlParams = new HashMap<>();
  46. urlParams.put("user", "john.doe");
  47. urlParams.put("user_id", "123");
  48. urlParams.put("user_profile", "active");
  49. urlParams.put("user_profile_settings", "theme=dark");
  50. urlParams.put("order", "12345");
  51. urlParams.put("order_details", "items=[item1, item2]");
  52. urlParams.put("order_details_items", "item1=10, item2=20");
  53. Map<String, Integer> nestingRules = new HashMap<>();
  54. nestingRules.put("user", 1);
  55. nestingRules.put("order", 1);
  56. nestingRules.put("user_profile", 2);
  57. nestingRules.put("order_details", 2);
  58. nestingRules.put("user_profile_settings", 3);
  59. Map<String, Object> nestedParams = nestParameters(urlParams, nestingRules);
  60. System.out.println(nestedParams);
  61. }
  62. }

Add your comment