import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LogFlattener {
/**
* Flattens a nested log entry structure into a single-level map.
*
* @param logEntries A list of log entry maps.
* @return A list of flattened maps, one for each log entry.
*/
public static List<Map<String, String>> flattenLogs(List<Map<String, Object>> logEntries) {
List<Map<String, String>> flattenedLogs = new ArrayList<>();
for (Map<String, Object> logEntry : logEntries) {
Map<String, String> flattenedEntry = new HashMap<>();
flattenHelper(logEntry, flattenedEntry);
flattenedLogs.add(flattenedEntry);
}
return flattenedLogs;
}
private static void flattenHelper(Map<String, Object> logEntry, Map<String, String> flattenedEntry) {
for (Map.Entry<String, Object> entry : logEntry.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value instanceof Map) {
// Recursively flatten nested maps
Map<String, Object> nestedMap = (Map<String, Object>) value;
flattenHelper(nestedMap, flattenedEntry);
} else if (value != null) {
// Convert non-map values to strings
flattenedEntry.put(key, String.valueOf(value));
}
}
}
public static void main(String[] args) {
// Example Usage
List<Map<String, Object>> logEntries = new ArrayList<>();
Map<String, Object> log1 = new HashMap<>();
log1.put("timestamp", "2023-10-27T10:00:00");
log1.put("level", "INFO");
Map<String, Object> details1 = new HashMap<>();
details1.put("user", "john.doe");
details1.put("message", "User logged in.");
log1.put("details", details1);
logEntries.add(log1);
Map<String, Object> log2 = new HashMap<>();
log2.put("timestamp", "2023-10-27T10:05:00");
log2.put("level", "ERROR");
Map<String, Object> details2 = new HashMap<>();
details2.put("user", "jane.doe");
details2.put("message", "Failed to process request.");
log2.put("details", details2);
logEntries.add(log2);
List<Map<String, String>> flattenedLogs = flattenLogs(logEntries);
for (Map<String, String> flattenedLog : flattenedLogs) {
System.out.println(flattenedLog);
}
}
}
Add your comment