1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. public class LogFlattener {
  6. /**
  7. * Flattens a nested log entry structure into a single-level map.
  8. *
  9. * @param logEntries A list of log entry maps.
  10. * @return A list of flattened maps, one for each log entry.
  11. */
  12. public static List<Map<String, String>> flattenLogs(List<Map<String, Object>> logEntries) {
  13. List<Map<String, String>> flattenedLogs = new ArrayList<>();
  14. for (Map<String, Object> logEntry : logEntries) {
  15. Map<String, String> flattenedEntry = new HashMap<>();
  16. flattenHelper(logEntry, flattenedEntry);
  17. flattenedLogs.add(flattenedEntry);
  18. }
  19. return flattenedLogs;
  20. }
  21. private static void flattenHelper(Map<String, Object> logEntry, Map<String, String> flattenedEntry) {
  22. for (Map.Entry<String, Object> entry : logEntry.entrySet()) {
  23. String key = entry.getKey();
  24. Object value = entry.getValue();
  25. if (value instanceof Map) {
  26. // Recursively flatten nested maps
  27. Map<String, Object> nestedMap = (Map<String, Object>) value;
  28. flattenHelper(nestedMap, flattenedEntry);
  29. } else if (value != null) {
  30. // Convert non-map values to strings
  31. flattenedEntry.put(key, String.valueOf(value));
  32. }
  33. }
  34. }
  35. public static void main(String[] args) {
  36. // Example Usage
  37. List<Map<String, Object>> logEntries = new ArrayList<>();
  38. Map<String, Object> log1 = new HashMap<>();
  39. log1.put("timestamp", "2023-10-27T10:00:00");
  40. log1.put("level", "INFO");
  41. Map<String, Object> details1 = new HashMap<>();
  42. details1.put("user", "john.doe");
  43. details1.put("message", "User logged in.");
  44. log1.put("details", details1);
  45. logEntries.add(log1);
  46. Map<String, Object> log2 = new HashMap<>();
  47. log2.put("timestamp", "2023-10-27T10:05:00");
  48. log2.put("level", "ERROR");
  49. Map<String, Object> details2 = new HashMap<>();
  50. details2.put("user", "jane.doe");
  51. details2.put("message", "Failed to process request.");
  52. log2.put("details", details2);
  53. logEntries.add(log2);
  54. List<Map<String, String>> flattenedLogs = flattenLogs(logEntries);
  55. for (Map<String, String> flattenedLog : flattenedLogs) {
  56. System.out.println(flattenedLog);
  57. }
  58. }
  59. }

Add your comment