我有一个 YML 文件,我使用 yamlBeans 库解析为 Map。我不知道嵌套地图有多深。例如:
- KEY1:
-
key2:value1
-
KEY3:
-
key4:value2
-
key5:value3
我需要在这个地图中找到一个特定的值,更新它,并将地图写回 YML 文件(我知道该怎么做)。
这是我更新值的代码,它正在运行。 但是,这只是通过嵌套映射迭代两次,我需要它根据需要迭代它:
static void updateYmlContent(Map<String, ?> ymlMap, String value, String... keys) {
boolean found = false;
for (Map.Entry entry : ymlMap.entrySet()) {
if (entry.getKey().equals(keys[0])) {
found = true;
for (Map.Entry subEntry : ((Map<?, ?>) entry.getValue()).entrySet()) {
if (subEntry.getKey().equals(keys[1])) {
subEntry.setValue(value);
break;
} else {
throwKeyNotFoundException(keys[1]);
}
}
break;
}
}
if (!found) {
throwKeyNotFoundException(keys[0]);
}
}
3 回答
使用递归和深度计数器来遍历地图的每个级别。我没有编译这个,所以它可能需要一些调整,但这是基本的想法:
如果
ymlMap
是可变的,它应该是Map<String, Object>
(理想情况下),我相信你已经检查过了。您可以通过一个
for
循环来完成,请参阅示例:另外请看它是如何使用的: