33public final class StructuredConfigSupport {
35 private StructuredConfigSupport() {
38 public static Map<String, String>
flatten(
final Map<String, Object> input) {
39 final Map<String, String> output =
new LinkedHashMap<>();
40 flattenInto(output,
"", input);
41 return Map.copyOf(output);
44 @SuppressWarnings(
"unchecked")
45 private static
void flattenInto(final Map<String, String> output, final String prefix, final Object value) {
50 case final Map<?, ?> map -> {
51 for (
final var entry : map.entrySet()) {
52 final var key = prefix.isBlank() ? String.valueOf(entry.getKey()) : prefix +
"." + entry.getKey();
53 flattenInto(output, key, entry.getValue());
57 case final List<?> list -> {
58 for (var i = 0; i < list.size(); i++) {
59 flattenInto(output, prefix +
"[" + i +
"]", list.get(i));
63 case final Enum<?> enumValue -> {
64 output.put(prefix, enumValue.name());
70 output.put(prefix, String.valueOf(value));