1

我一直在尝试创建一种方法,将我拥有的值组合到 Yaml.load 可以读取的 Map 中。因此,例如:

Map<String, Object> map = new HashMap<String, Object>();
map.put("example.key.abc", "test");
map.put("example.key.def", "another test");
map.put("example.test", "yet another test");
map.put("example2.ex", "ex2");

我想把它变成 Yaml 可以读取的 Map。例如,我尝试将 abc 和 def 放入带有它们的值的映射中,然后将该映射放入带有其他值的映射中。我似乎永远无法让它发挥作用。另外,我希望它能够与任何键一起使用,因此仅手动进行映射是行不通的。如果我可以通过我的其余代码运行一个可以用 Yaml 读取的 Map,这是我希望从上面的键中获得的输出:

example:
  key:
    abc: test
    def: another test
  test: yet another test
example2:
  ex: ex2

我似乎无法制作可以将我拥有的 Map 组合成 Yaml 可以理解的 Map 的方法。是否有 API,或者这只是一种非常简单的方法,我只是无法弄清楚?任何帮助表示赞赏,谢谢。

4

1 回答 1

0

您如何看待Guavas Splitter(特别是MapSplitter #withKeyValueSeparator)与mapTransformation 之类的结合

Maps.transformEntries(fromMap, transformer)

所以得到的地图,你可以给snakeYaml看起来像

Map<String,Map<String,Map<String, String>>> =
  ImmutableMap.of("example", ImmutableMap.of("key", ImmutableMap.of("abc", "test")... 

顺便说一句:你知道来自typesafe-config 的HOCON ,这个库支持点分隔(映射形成)配置文件的读写

foo.bar=10
foo.baz=12

Config foo = conf.getConfig("foo");
int bar2 = foo.getInt("bar");

或者

int bar1 = conf.getInt("foo.bar");
于 2014-03-08T18:33:09.293 回答