Groovy,从 yml 文件通过迭代添加到地图

Groovy, Add to Map via iteration from yml file

我需要帮助来读取 yml 文件并将多个条目添加到地图。

如果我手动添加 yml 文件中的每个条目,它将如下所示:

    Map<String, String[]> map1 = [:]
    map1."TestvalueX" = "0"
    map1."TestvalueY" = "1"
    map1."TestvalueZ" = "4"

map1 的输出:[TestvalueX:0, TestvalueY:1, TestvalueZ:4]

示例 YML 文件:

 - TestvalueX: "0"
 - TestvalueY: "1"
 - TestvalueZ: "4"

我需要添加什么来读取 yml 文件并通过迭代将这些值添加到 map1?

https://github.com/jeffbrown/yamlparse 查看项目。

app/src/main/resources/demo.yml

info:
  TestValueX: 0
  TestValueY: 1
  TestValueZ: 4

app/src/main/groovy/yamlparse/App.groovy

package yamlparse

import groovy.yaml.YamlSlurper

class App {

    static void main(String[] args) {
        def slurper = new YamlSlurper()
        def yaml = slurper.parse(App.getResourceAsStream('/demo.yml'))

        Map m = yaml.info
        println m
        assert m.TestValueX == 0
        assert m.TestValueY == 1
        assert m.TestValueZ == 4
    }
}

这似乎有效:

~ $ git clone git@github.com:jeffbrown/yamlparse.git
Cloning into 'yamlparse'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 24 (delta 0), reused 24 (delta 0), pack-reused 0
Receiving objects: 100% (24/24), 59.84 KiB | 475.00 KiB/s, done.
~ $ 
~ $ 
~ $ cd yamlparse 
yamlparse (main)$ 
yamlparse (main)$ ./gradlew run

> Task :app:run
[TestValueX:0, TestValueY:1, TestValueZ:4]

您可以编写代码来迭代该 Map 并对数据做任何您喜欢的事情。

编辑:

问题表明 Yaml 看起来像这样:

- TestValueX: 0
- TestValueY: 1
- TestValueZ: 4

当我写出最初的答案时,我认为那是一个错误,你实际上在 Yaml 中有一个 Map,但如果 Yaml 是问题实际上是正确的,那么你可以使用这样的东西:

def slurper = new YamlSlurper()
def yaml = slurper.parse(App.getResourceAsStream('/demo.yml'))

Map newMap = [:]

for(Map m : yaml) {
    newMap += m
}

println newMap
assert newMap.TestValueX == 0
assert newMap.TestValueY == 1
assert newMap.TestValueZ == 4