【问题标题】:Groovy: Parsing List elementsGroovy:解析列表元素
【发布时间】:2022-10-17 13:20:18
【问题描述】:

出于学习目的,我喜欢将以下查找表解析如下: 我想检查分支名称并获取相应的名称值,但我想获取每个分支的名字,例如: [branch: "test"] => name "a" than [branch: "test-1" ] => 名称 "d" ;等等,

LUT = [
    [branch: "test", name: 'a', image_name: 'abc'],
    [branch: "test", name: 'b', image_name: 'abc'],
    [branch: "test", name: 'c', image_name: 'abc'],
    [branch: "test-1", name: 'd', image_name: 'abc'],
    [branch: "test-1", name: 'e', image_name: 'abc'],
    [branch: "test-2", name: 'f', image_name: 'abc'],
    [branch: "test-2", name: 'g', image_name: 'abc'],
    [branch: "test-2", name: 'h', image_name: 'abc'],
    [branch: "test-3", name: 'i', image_name: 'abc'],
    [branch: "test-3", name: 'j', image_name: 'abc'],
    [branch: "test-4", name: 'k', image_name: 'abc'],
    [branch: "test-5", name: 'l', image_name: 'abc'],
]

例如,结果可能如下所示:

result = {
 "test": [{ "name":"a" }],
 "test-1": [{ "name":"d" }],
 "test-2": [{ "name":"f" }],
 "test-3": [{ "name":"i" }], 
"test-4": [{ "name":"k" }], 
"test-5": [{ "name":"l" }], 
} 

此外,稍后我可能想为键添加其他值,例如在 test-1 中: "test-1": [{ "name":"a",“新名称”:“新”}]

【问题讨论】:

    标签: java parsing jenkins groovy hash


    【解决方案1】:

    我不确定你的大括号,但这会创建一个地图:

    def original = [
        [branch: "test", name: 'a', image_name: 'abc'],
        [branch: "test", name: 'b', image_name: 'abc'],
        [branch: "test", name: 'c', image_name: 'abc'],
        [branch: "test-1", name: 'd', image_name: 'abc'],
        [branch: "test-1", name: 'e', image_name: 'abc'],
        [branch: "test-2", name: 'f', image_name: 'abc'],
        [branch: "test-2", name: 'g', image_name: 'abc'],
        [branch: "test-2", name: 'h', image_name: 'abc'],
        [branch: "test-3", name: 'i', image_name: 'abc'],
        [branch: "test-3", name: 'j', image_name: 'abc'],
        [branch: "test-4", name: 'k', image_name: 'abc'],
        [branch: "test-5", name: 'l', image_name: 'abc'],
    ]
    
    println original
        .groupBy { branch -> branch.branch }
        .collectEntries { key,value -> [(key) : [name : value.get(0).name]] }
    

    【讨论】:

      【解决方案2】:

      不确定如何按照您的意愿格式化结果,但是找到每个分支的第一个实例相当容易。

      result = [:]
      for (map in LUT)
      {
          if (!result.containsKey(map['branch']))
          {
              println map['name'] // prints the unique name
              result.put(map['branch'], map['name'])
          }
      }
      

      【讨论】:

      • 这将导致 = [test:a, test-1:d, test-2:f, test-3:i, test-4:k, test-5:l],但我想要的是列表或使用键 (test,test-1,test2,....) 和名称进行散列,,,, 因为我只对列表中的每个第一个分支感兴趣,这就是我在上面的示例结果中试图解释的内容
      • 您的解决方案是 1 对 1 映射,我想要的是将“分支”作为键,因此我可以向该分支添加更多元素,
      • 是的,我不确定如何获得您想要的列表格式,但这只是为了展示如何遍历原始地图并找到每个分支的第一个实例。
      猜你喜欢
      • 2016-09-03
      • 2023-03-10
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多