我想用;
分隔符分割以下查询字符串,然后转换为地图。这样我就可以使用密钥访问值iPhone,6s Plus和2016。
def query = type=iPhone;modelName=6s Plus;year=2016
def result = query .split(';')
println result
我要访问这样的值-result.getAt('type'), result.getAt('modelName')
我尝试了以下方法-但它没有按预期工作
Map<String,String> response = result.collectEntries{
[
it.type,
it.modelName,
it.year
]
}
如何在Groovy中实现这一目标?
答案 0 :(得分:2)
我知道最短的版本如下:
def query = 'type=iPhone;modelName=6s Plus;year=2016'
def map = query.tokenize(';')*.tokenize('=').collectEntries()
println map.modelName // => 6s Plus
深度算法:
第一个标记化将输入字符串分成3个字符串的列表
['type=iPhone', 'modelName=6s Plus', 'year=2016']
接下来,我们对列表中的每个元素调用标记化,以使用=
作为两个字符串元素列表的定界符将其拆分,例如:
[['type', 'iPhone'], ['modelName', '6s Plus'], ['year', '2016']]
最后我们称为collectEntries()
-如果未传递任何参数,则它将期望一个大小为2的列表,其中第一个元素是键,第二个元素是映射条目的值
['type':'iPhone', 'modelName':'6s Plus', 'year':'2016']
最后,您可以从查询字符串中获取地图,并且可以通过键简单地访问每个地图条目。
答案 1 :(得分:0)
def x = "type=iPhone;modelName=6s Plus;year=2016"
def m = x.split(';').collectEntries{it.split('=') as List}
println m.modelName