Groovy 映射到映射列表

Groovy 映射到映射列表,groovy,Groovy,我的原始列表看起来像 def l = [a:apple, a:application, b:batch, c:commandLine, c:crash] 我需要把它转换成 [ ["a":"apple"],["a":"application"],["b":"batch"],["c":"commandLine"],["c":"crash"] ] 如何转换它?您的输入列表不是无效的Groovy,因此(至少)有两种可能的假设: 如果您的输入是地图,例如: def l = [a: 'apple', b

我的原始列表看起来像

def l = [a:apple, a:application, b:batch, c:commandLine, c:crash]
我需要把它转换成

[ ["a":"apple"],["a":"application"],["b":"batch"],["c":"commandLine"],["c":"crash"] ]

如何转换它?

您的输入列表不是无效的Groovy,因此(至少)有两种可能的假设:

如果您的输入是地图,例如:

def l = [a: 'apple', b: 'batch']
def l = ['a:apple', 'b:batch']
你可以做:

l.collect { k,v -> [(k): v] }
如果您的输入是类似地图的字符串列表,例如:

def l = [a: 'apple', b: 'batch']
def l = ['a:apple', 'b:batch']
你需要像这样的东西:

l.collect {
    def tokens = it.split(/:/)
    [(tokens[0]): tokens[1]]
}
更新
或更简单的方法,如:

l.collect { it.split(/:/).toSpreadMap() }

以一个“

结束难道不是[“$k”:“$v”]?否。“v”始终是一个值,但必须转义键。虽然将键包装在括号中更好,因为它保留了键的类型。我只使用了字符串,因为他特别想要字符串键。映射数组的通用映射将使用
[(k):v]
。我不认为问题中的
l
是映射。键
a
重复。
l
甚至不是有效的Groovy。如果他的意思是
l=['a:val','b:val']
,那肯定会改变问题。您的赋值语句在Groovy中无效。它必须是def l=[a:“苹果”,a:“应用程序”,…]。除非用引号括起来,否则它不会编译。如果你定义像[a:“1”,b:“2”]这样的东西,它已经是一张地图了。列表的定义类似于[a,b,c,d]Is
l
映射类似于:
l=[a:'apple',b:'batch']
或者列表类似于
l=['a:apple','b:batch']
我怀疑这是否是目的,但是如果所有{a,b,c,application,batch,commandLine,crash}都是对象,那么这个赋值就是合法的Groovy。也就是说,这个问题确实值得怀疑。是的,我需要defl=[[“a”:“apple”],[“a”:“application”]]