如何修改Groovy脚本将多行键值输出转换为指定格式的Map?
修改Groovy脚本输出为指定Map格式
原脚本及当前输出
原Groovy脚本如下:
def projectDirectories = [ "golang-base", "java-base", "cpp-base", "ubuntu-fips", "suse-base", "golang-base", "java-base", "cpp-base", "ubuntu-fips", "suse-base", ] def partition(array, size) { def partitions = [] int partitionCount = array.size() / size partitionCount.times { partitionNumber -> def start = partitionNumber * size def end = start + size - 1 partitions << array[start..end] } if (array.size() % size) partitions << array[partitionCount * size..-1] return partitions } def results = partition(projectDirectories, 2) assert results instanceof List for(i=0;i<results.size();i++) { def resultUUID = UUID.randomUUID() .toString() .split('-')[-1..-2] .join() .toUpperCase() println (i+":"+resultUUID); }
当前脚本输出为:
[0:0D0759825372ADC2] [1:E0E191BDFFD9B882] [2:1AC6086897BA9FFE] [3:8F92F1C0B70697B9] [4:EC0D5D755849A01A]
修改后的脚本
要得到形如[0:0D0759825372ADC2,1:E0E191BDFFD9B882,2:1AC6086897BA9FFE,3:8F92F1C0B70697B9,4:EC0D5D755849A01A]的Map格式输出,修改后的脚本如下:
def projectDirectories = [ "golang-base", "java-base", "cpp-base", "ubuntu-fips", "suse-base", "golang-base", "java-base", "cpp-base", "ubuntu-fips", "suse-base", ] def partition(array, size) { def partitions = [] int partitionCount = array.size() / size partitionCount.times { partitionNumber -> def start = partitionNumber * size def end = start + size - 1 partitions << array[start..end] } if (array.size() % size) partitions << array[partitionCount * size..-1] return partitions } def results = partition(projectDirectories, 2) assert results instanceof List def resultMap = [:] for(i=0;i<results.size();i++) { def resultUUID = UUID.randomUUID() .toString() .split('-')[-1..-2] .join() .toUpperCase() resultMap.put(i, resultUUID) } // 输出指定格式的Map字符串 println "[" + resultMap.collect { k, v -> "$k:$v" }.join(",") + "]"
改动说明
- 新增
resultMap变量存储键值对数据; - 循环内不再直接打印,而是将索引与对应UUID存入Map;
- 最后通过
collect将Map键值对转为key:value格式字符串,用逗号拼接后包裹方括号输出。
内容的提问来源于stack exchange,提问作者Hare Krshn
相关产品推荐
相关产品推荐

