如何将Groovy地图转换为键="值"字符串?

9

我需要将地图转换为一个字符串,其中键/值对分隔为key="value"。

我可以按照以下方式操作,并且这个方法可以实现,但是是否有更简洁的方法来完成呢?

void "test map to string"() {
given: "a map"
Map fields = [class: 'blue', type:'sphere', size: 'large' ]

when:
StringBuilder stringBuilder = new StringBuilder()
fields.each() { attr ->
    stringBuilder.append(attr.key)
    stringBuilder.append("=")
    stringBuilder.append('"')
    stringBuilder.append(attr.value)
    stringBuilder.append('" ')
}

then: 'key/value pairs separated into key="value"'
'class="blue" type="sphere" size="large" ' == stringBuilder.toString()
}

如果这是HTML(或XML),请记住您可能需要引用甚至编码值。 - cfrick
2个回答

17

您可以使用所需格式进行map.collect

Map fields = [class: 'blue', type:'sphere', size: 'large' ]

toKeyValue = {
    it.collect { /$it.key="$it.value"/ } join " "
}

assert toKeyValue(fields) == 'class="blue" type="sphere" size="large"'

如果您不需要嵌套映射,这是一个很好的解决方案。 - Kyle Pittman

2
您可以使用Groovy的map.toMapString()方法。
Map fields = [class: 'blue', type:'sphere', size: 'large' ]
fields.toMapString()

3
无法转换为所需的格式。 - Tamás Szelei
是的,如果它能正常工作那就太好了,但我仍然得到类似这样的地图:[version: 1.2.3-4],而且它不能正确地进行评估。由于值中的标点符号导致出现意外的标记。 - Kyle Pittman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接